From f708732f5b220a15ed3016d35e79247d627156ff Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Mon, 30 Oct 2017 16:46:13 +0000 Subject: [PATCH] Refs #426. Reserved first 192 bytes of RAM in the Keil STM32F0 Bootloader demo programs. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@385 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- Doc/doxygen/DoxyfileOpenBLT | 2 +- .../Boot/bin/openblt_stm32f051.axf | Bin 342672 -> 342676 bytes .../Boot/bin/openblt_stm32f051.srec | 92 +++++++++--------- .../Boot/stm32f051.sct | 2 +- .../Boot/STM32F091.sct | 2 +- .../Boot/bin/openblt_stm32f091.axf | Bin 403220 -> 403220 bytes .../Boot/bin/openblt_stm32f091.srec | 92 +++++++++--------- Target/Source/boot.h | 2 +- 8 files changed, 96 insertions(+), 96 deletions(-) diff --git a/Doc/doxygen/DoxyfileOpenBLT b/Doc/doxygen/DoxyfileOpenBLT index 7791e3d5..47758498 100644 --- a/Doc/doxygen/DoxyfileOpenBLT +++ b/Doc/doxygen/DoxyfileOpenBLT @@ -38,7 +38,7 @@ PROJECT_NAME = "OpenBLT Bootloader - Reference Manual" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.4.2 +PROJECT_NUMBER = 1.4.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.axf b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.axf index a073a362633bf3682033ad4231518ae504010b3f..60d1b7a55aae1d59bc4efdd0e19c9c205c37403a 100644 GIT binary patch delta 1740 zcmYjS4Qv!u5Pmy?Jz_F9mZR>=LeJs|QcP-?M?kbp$t+G`Urw5L)0NyQow zqNtQC@CY^t#0D^6ft6dpQm$gO(A3sa2mu0zX%!UYPzyxFI&b$bVJ~mzeecbDGxO~v zSKptuxj(IbwDNb6Lee&6*;#JVp~Br1je3!0C+Av-BR2_`RW2=&g(z)PTlwq}7YK2r z9D!2ma0E$o^}`h_2JT%QNI7vq9Rtg0M12SHM??%C61_1%q8$&}eB!VMQ%(>PQClHL ziQ;WUy#=FaL`zUMFiRaLj#{d1A5={(wUjvOxSE_$6+2enPFNS;S`xovbzBQ2E~K@wOkCld5-Zv!t1lnjy{e zsoB!3G0pDO7bRl$JZUD`r%6+7A1}>T)3n&rB|2|6SVpFmNK}%aPuDZ!TQEmCSQM>)o z>QPpi8c(CDf6pn+x#x>PAeC1S9vrLI>}}L`HVvlu1@<324q5V}E-m+0yd0>hd9^H9 zS-t3`Rh1;=3=pF5%Q9+%f1FyjXs`BMXqgqYZ)zDyd$cnxKT+DPHH4dzY54up&h@38 z6c^J=J9+UdG^}r#0q=67yA-U16Gp~a2np+tJqa7Bs|$&(vGdPxBQZrx(Qg;xZp18x zzee06`sTpNS#l-`R>twSBmvuwVT!n1Vw_uyLK;qLB*s}rM#KL#1B+kg!WyILc=|u_ zT#67+KY;kM_+TEKbV<=>Ae~HiEfMvMVM(8X-9%zxvb#HYAJJbghM_!F%3m6b3nUZb zr25vUU>eJoBW{h=Ut=RgV!-+&;aiC7xVXCj{wj#dq2;PVIrruu$%NcFc7cYd&l+-rlUxEBKOx&L%<x8P^)_P9*)yxZ^%XU>>o^Iz~S3LKbh zDk_%Ug&Ahgk^7K|GFBL0rd{v&7lP>ME%F_ismumeRVg#I>kAdd&-BBCl<$UdkJo1& z&dyNYU}9&sGF__BB=%(~6S%9wFJ^vBx;qkuE|)rrb>&I*k2 sXxHbumGKrD7OQ+p4vp$te9B2mw~575l(EB?;9pe(4rct3LoJ{G0X@tDNdN!< delta 1715 zcmYjReQZ-z6u%$mb?pXQ*KTuzG2g~yUqIT9ZOw=TP^66E03i{KLO-@l#jO}cF&X}0 zgeXQ_9`Fzmg|Gky-0;aR;250{B&%ccWegI5=uFfQHVtT0oaes2>ayK;?(dv?e&?Lu zz3J9FS?}O~zA{{+5NCU#n>D8$soqP`Xjf@bdb2{*<}_R>av7h#~;eeB}8=| zg?g&0Q8K*l-s;t(zh579p3K!I!78e1ZBUV?nrF!HPordb;2v8*RD0BU5}jHflqeqD zsM;-WSx z8uP||ODWL`(|@7G+W3qT{8q`Y@nptnYAZ#$GoVe$JkO#;yPG*znp#(ZG%H<2(rieW zy{@MuV(xNjrn_fJ)8d{Y&Gv-pb>~R*wcBKwkX0v9Q&x3O6szz6d6|^buc#WGPjF%A zldOvqWQYbxVP7;lzf0~>i~#O2ygS>Z>(2fzlVHSyAE3m3D2LcRMn_KFB8Huhg!5>r zmKG_XWmvdop8cPu?;ukfrnuW^`cL;TmJWOBQZrx@!TH7F2u~jpCZoEhvvblx$;dC z?2O~z;|@ZSm?92IjPDk+kcN|1iSaEXqj~-X6YD=d0vpVsljVO!zZ4-^eiU)O{`!14 z<&~n%MmkyUW-1{`Ea?ky8r4dZ(~V$U6)y%LgS(=*t+(4Zdy*uD^Eu_F1z?Ns<_hts~EM5D@FwK|l6ud&Gr&)flmGemRVhA%~I7xZynS>;Q>#e3i^ z!pbTW>KIKGw>#h{=ibK97+>2*=!42?zeVck#F}E;5%5v&tG1lG4fq1dd{ugT46cX= zkHImSUX3H=vB8eq-|1+>}Q~hG0RW)So{B>LgpzPGF7#A1*hNuiDj`xcUs;uYS=ZnaO z;$pd?1ep*i%IRz#sWB<~MW8@=iHTlS$;JB!nU@>MLrM$#j|CR;%3iFCAdm2LJ#7 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.srec b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.srec index 6f53a03f..2e5a249c 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.srec +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/bin/openblt_stm32f051.srec @@ -1,4 +1,4 @@ -S31508000000680B0020650100088B0100088D010008B7 +S31508000000280C0020650100088B0100088D010008F6 S3150800001000000000000000000000000000000000D2 S315080000200000000000000000000000008F0100082A S31508000030000000000000000091010008930100087C @@ -24,10 +24,10 @@ S3150800016017F900000F4880F308880F480168090E40 S315080001700E4A914205D10E480E4901600E480F49B4 S3150800018001600F4880470F480047FEE7FEE7FEE795 S31508000190FEE7FEE7FEE700000B480C490C4A0D4B4C -S315080001A070470000680B0020040000001F000000D4 +S315080001A070470000280C0020040000001F00000013 S315080001B01810024001000000000001400000000085 -S315080001C06D0E0008C100000868050020680B0020B5 -S315080001D06807002068070020002203098B422CD3F9 +S315080001C06D0E0008C100000828060020280C002033 +S315080001D02808002028080020002203098B422CD377 S315080001E0030A8B4211D300239C464EE003460B4379 S315080001F03CD4002243088B4231D303098B421CD3DB S31508000200030A8B4201D394463FE0C3098B4201D3CC @@ -54,28 +54,28 @@ S31508000340050069465346C008C000854618B020B562 S31508000350FFF722FF60BC00274908B6460026C0C53D S31508000360C0C5C0C5C0C5C0C5C0C5C0C5C0C5403D5F S3150800037049008D46704710B50446C046C04620461B -S31508000380FFF7E9FE10BD0000004870470805002089 +S31508000380FFF7E9FE10BD000000487047C8050020C9 S3150800039001491820ABBEFEE726000200704700F0B0 S315080003A0A4F8FCE710B500F073F801280ED0084C45 S315080003B0207801280AD100F089FD6168FF31F531FE S315080003C0884203D30020207000F0B0F810BD00006A -S315080003D01800002010B5044C0120207000F076FDAE -S315080003E06060FFF7DFFF10BD1800002010B500F0B1 +S315080003D0D800002010B5044C0120207000F076FDEE +S315080003E06060FFF7DFFF10BDD800002010B500F0F1 S315080003F084F800F071F800F071FD00F01FFC00F0C1 S315080004003BF8FFF7E7FF10BD10B500F06EF800F0F7 S315080004107FFD00F041F8FFF7C5FF10BD70470000EB S3150800042009480078002807D0012807D0022807D0F5 S31508000430032807D0402070474020704700207047A7 -S3150800044000207047002070472000002009480078E7 +S315080004400020704700207047E00000200948007827 S31508000450002807D0012807D0022807D0032807D08C S3150800046040207047402070470020704700207047A2 -S31508000470002070472000002010B500F0E9FF00F0CA -S31508000480CDFD02490020087010BD000020000020A4 +S3150800047000207047E000002010B500F0E9FF00F00A +S31508000480CDFD02490020087010BD0000E0000020E4 S3150800049010B500F0EBFF10BD10B5064800F0F0FDF2 S315080004A0012805D1044900200870024800F0E8FF39 -S315080004B010BD0000300000202000002010B5054ABD +S315080004B010BD0000F0000020E000002010B5054A3D S315080004C01278002A02D1C9B200F02EFE01F042F8D5 -S315080004D010BD00002000002010B500F001F810BD86 +S315080004D010BD0000E000002010B500F001F810BDC6 S315080004E010B5642000F072FB10BD10B500F001F8DD S315080004F010BD10B500F070FB10BD10B500F001F886 S3150800050010BD72B6704762B6704770B505460C46A0 @@ -116,7 +116,7 @@ S315080007200020FEBD0020FEBD0020FEBD10B50C4811 S315080007300068401C04D00A4800F04CF900280AD08A S3150800074008480068401C04D0064800F043F9002811 S3150800075003D0012010BD002010BD002010BD0000F0 -S31508000760C0020020BC00002070B504460E46204694 +S31508000760800300207C01002070B504460E46204612 S3150800077000F052F80546A019401E00F04DF8014653 S31508000780FF2D05D0FF2903D0284600F003F870BDD9 S31508000790002070BD70B505460C46A54201D900205B @@ -139,14 +139,14 @@ S31508000890FFF72BFE0C2060434019007AB04204D1C2 S315080008A00C2044436019406870BD641CE4B20D2CEA S315080008B0EED3002070BD0000C01500080048704740 S315080008C00020000800200349C04308600249086068 -S315080008D070470000BC000020C002002010B5CA0501 +S315080008D0704700007C0100208003002010B5CA057F S315080008E001D0002010BD02688A4201D1012010BD46 S315080008F002C001225202FFF708FE012010BD0000C7 S3150800090070B504460D460E48844201D10D4C0AE0E6 S315080009100D48854202D10A4C054604E0204600F0FF S3150800092059F8002807D029462046FFF7D7FF0028A0 S3150800093003D0204670BD002070BD002070BD0000A9 -S31508000940C0020020BC000020002000080B480168F7 +S31508000940800300207C010020002000080B48016875 S315080009504268511882685118C268511802695118BC S3150800096042695118806940180449C0310968081855 S31508000970002801D000207047012070470020000899 @@ -154,8 +154,8 @@ S3150800098070B504460D4616462046FFF745FFFF2874 S3150800099011D06019401EFFF73FFFFF280BD0600AF1 S315080009A040020949884208D12B4632462146074863 S315080009B0FFF778FE70BD002070BD2B4632462146F3 -S315080009C00348FFF76FFE70BD00200008C002002034 -S315080009D0BC000020F8B50546012000902868FFF7FE +S315080009C00348FFF76FFE70BD002000088003002073 +S315080009D07C010020F8B50546012000902868FFF73D S315080009E01BFFFF2819D0FFF73DFE3420FFF7D0FD87 S315080009F0FFF7F0FD012812D000242868A100461848 S31508000A0048194768FFF771FD39463046FFF7FEFD7E @@ -166,7 +166,7 @@ S31508000A4008B5002000900E480168491C15D0416879 S31508000A5082685118C26851180269511842695118BA S31508000A6082695118C0694018C043401C00906A4604 S31508000A7004210448FFF784FF08BD012008BD0000D3 -S31508000A80C0020020C0200008F0B50022032501237B +S31508000A8080030020C0200008F0B5002203250123BA S31508000A9093400C681C409C422AD10C79012C01D049 S31508000AA0022C12D1876854002E46A640B7438760A9 S31508000AB04E79A64084682643866084889C43848051 @@ -187,11 +187,11 @@ S31508000B9003213846FFF7B0FF0C20009068464671DF S31508000BA0022101718471C57169463846FFF76CFFE9 S31508000BB0FEBD00000008004810B5FF2101310248BB S31508000BC0FFF7B1FF10BD0000000800480149488042 -S31508000BD0704700001000002010B500F077F90C4CA3 +S31508000BD070470000D000002010B500F077F90C4CE3 S31508000BE0616888420ED32278FF2101310948002A1C S31508000BF009D000222270FFF796FF00F067F9618896 S31508000C004018606010BD01222270FFF78EFFF4E7DE -S31508000C10100000200008004810B5FFF711FF002853 +S31508000C10D00000200008004810B5FFF711FF002893 S31508000C2002D0FFF783FD10BD002010BD10B5FFF7F9 S31508000C309BFD10BD10B5FFF741FE10BD10B5FFF7BF S31508000C4041FE10BD10B5FFF781FE10BD10B5FFF7C8 @@ -220,7 +220,7 @@ S31508000DA0BF03BF0F0FD0326B9203920F012A0CD0EC S31508000DB0316B8903890F022909D0316B8903890FA1 S31508000DC0032906D006E0E26104E0E16102E0E3619E S31508000DD000E0E561316B090602D407482062F8BDD8 -S31508000DE02062F8BD0010024000127A0000000020C0 +S31508000DE02062F8BD0010024000127A00C000002000 S31508000DF0809FD50000093D00006CDC0200800000E1 S31508000E00034A116889088900014311607047000088 S31508000E1000000140134911200860134841684160E9 @@ -235,12 +235,12 @@ S31508000E90016041683F22120491434160C16A090911 S31508000EA00901C162016BFF22543291430163416B10 S31508000EB049084900416300218160FFF7ABFF10BD77 S31508000EC0001002400CB8FFF8FFFFF6FE00B500F070 -S31508000ED01FF80148006800BD2400002000B500F096 +S31508000ED01FF80148006800BDE400002000B500F0D6 S31508000EE011F8064804494161002181610522026121 S31508000EF00348016000BD00007FBB000000E000E081 -S31508000F0024000020014900200861704700E000E045 +S31508000F00E4000020014900200861704700E000E085 S31508000F1004480069C00303D503480168491C0160F9 -S31508000F207047000000E000E024000020002904D0FB +S31508000F207047000000E000E0E4000020002904D03B S31508000F3001680122114301607047016849084900A8 S31508000F400160704702460020D2690A4200D001209B S31508000F507047000030B589B004460D462068400841 @@ -268,8 +268,8 @@ S315080010A015FF61686431884200D965700020F8BD73 S315080010B00F48FFF7D1FF0128F8D130780028F5D07E S315080010C0FFF704FF6060257001206070EEE7207866 S315080010D0401CC2B2227030789042E7D1711C384663 -S315080010E0FFF713FA65700120F8BD000028000020FC -S315080010F0C404002070B505460A4C80212046FFF737 +S315080010E0FFF713FA65700120F8BD0000E80000203C +S315080010F08405002070B505460A4C80212046FFF776 S3150800110021FF00280BD029462046FFF782FF8021C1 S315080011102046FFF717FF0028F9D0012070BD0020F0 S3150800112070BD00000044004070B506460D46402DCF @@ -282,50 +282,50 @@ S3150800118063655C41524D434D305F53544D3332468F S31508001190305C756172742E630000000010B5084C4F S315080011A0FF21E1704168E21DA06C00F043F920714F S315080011B000206071A071082120464030818010BD52 -S315080011C07000002070B500F0CBF90E4C0125257093 +S315080011C03001002070B500F0CBF90E4C01252570D2 S315080011D0FF20E0700021102020716171FFF720F9CF S315080011E0A071FFF733F9E071FFF730F9000A2072B2 S315080011F06572A5722046082140308180FFF71EFDE2 -S3150800120070BD00007000002010B5064C002020704C +S3150800120070BD00003001002010B5064C002020708B S3150800121000F0A6F9FF20E0700121204640308180C9 -S3150800122010BD0000700000200748FF21C170074963 +S3150800122010BD0000300100200748FF21C1700749A2 S31508001230816400210171417181710721C01C4160DF -S3150800124008213D308180704770000020B6150008DF +S3150800124008213D308180704730010020B61500081E S315080012500648FF21C17000210171427842718171EF -S31508001260C1710172062140308180704770000020EC +S31508001260C17101720621403081807047300100202B S3150800127070B50446FFF7D4F86178801E884203DA11 S31508001280222000F073F970BD104DFF20E87001218F S31508001290284640308180617800290AD0A21CA86CB3 S315080012A0FFF7D4FC00280CD06178A86C4018A86415 S315080012B070BDFFF7B1FC0028FAD1312000F056F9CD -S315080012C070BD312000F052F970BD0000700000209A +S315080012C070BD312000F052F970BD000030010020D9 S315080012D010B5094C4168A06CFFF7A8FC002806D099 S315080012E0FF20E070012120464030818010BD31206A -S315080012F000F03CF910BD00007000002070B50546EE +S315080012F000F03CF910BD00003001002070B505462D S31508001300FFF78EF80C4C411E6A1CA06CFFF79EFC7A S3150800131000280CD0FF20E070FFF782F8A16C401E71 S315080013204018A064012120464030818070BD3120DC -S3150800133000F01CF970BD00007000002010B53120C7 +S3150800133000F01CF970BD00003001002010B5312006 S3150800134000F014F910BD000010B5FFF7EFF80449D6 S31508001350FF20C870024801214030818010BD00007E -S315080013607000002070B5084CFF20E070002525713C +S315080013603001002070B5084CFF20E070002525717B S315080013706571FFF755F8A071E57125726572072149 -S3150800138020464030818070BD700000200449FF224D +S3150800138020464030818070BD300100200449FF228C S31508001390CA704068886402480121403081807047DD -S315080013A07000002070B50446FFF73AF86178401ED1 +S315080013A03001002070B50446FFF73AF86178401E10 S315080013B0884203DA222000F0D9F870BD094D616829 S315080013C0A9646278281DFFF7A0F8FF20E870617805 S315080013D0A86C4018A86460782946401C403188806B -S315080013E070BD00007000002010B5002000F0BEF8A7 +S315080013E070BD00003001002010B5002000F0BEF8E6 S315080013F010BD000070B50546FFF712F86A78401E62 S31508001400904203DA222000F0B1F870BD084C201D86 S31508001410A16CFFF77AF8FF20E0706978A06C401895 S31508001420A06468782146401C4031888070BD000061 -S315080014307000002010B5002303E00478401CE31870 +S315080014303001002010B5002303E00478401CE318AF S31508001440DBB2491E4C1CF8D11360012010BD000008 S31508001450054A00201070906411464031C870888093 -S3150800146090705070704700007000002003480078A4 -S31508001470002801D001207047002070477000002026 +S3150800146090705070704700003001002003480078E3 +S31508001470002801D001207047002070473001002065 S3150800148070B50178324CFF290FD02278012A5ED137 S31508001490F42921D013DCD02936D009DCC92930D06B S315080014A0CC293DD0CF293ED137E0FFF78BFE3DE072 @@ -339,10 +339,10 @@ S3150800151029FF0BE0FFF7DCFE08E0FFF715FF05E003 S31508001520FFF70CFF02E0202000F020F8084D4035B8 S31508001530E878012802D1102000F018F80421695E25 S31508001540002904DD0120E870E01C00F01BF870BDDE -S315080015507000002001480021C1707047B0000020CB -S315080015600149002048707047700000200449FE2297 +S315080015503001002001480021C17070477001002049 +S315080015600149002048707047300100200449FE22D6 S31508001570CA70087102480221403081807047000015 -S315080015807000002010B589B2FEF798FF10BD30B480 +S315080015803001002010B589B2FEF798FF10BD30B4BF S315080015907446641E2578641CAB4200D21D46635D02 S315080015A05B00E31830BC1847FFF7C2FAFEF71EFFC8 S315080015B0FEF72AFFFCE74F70656E424C54000000A8 @@ -356,8 +356,8 @@ S3150800162000600008000800000C00000000680008C0 S31508001630000800000D000000007000080008000007 S315080016400E00000000780008000800000F000000E7 S315080016500080000800800000100000007C160008CA -S31508001660000000203000000004010008AC16000845 -S3150800167030000020380B00002001000800000000A0 +S31508001660C00000203000000004010008AC16000885 +S31508001670F0000020380B00002001000800000000E0 S31508001680010203040102030406070809000000001A S315080016900000000000000000000000000400000038 S311080016A000000000000000000000000030 diff --git a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/stm32f051.sct b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/stm32f051.sct index 723d237f..ef5e6901 100644 --- a/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/stm32f051.sct +++ b/Target/Demo/ARMCM0_STM32F0_Discovery_STM32F051_Keil/Boot/stm32f051.sct @@ -8,7 +8,7 @@ LR_IROM1 0x08000000 0x00002000 { ; load region size_region *(InRoot$$Sections) .ANY (+RO) } - RW_IRAM1 0x20000000 0x00002000 { ; RW data + RW_IRAM1 0x200000C0 0x00001F40 { ; RW data - first 192 bytes reserved by OpenBLT .ANY (+RW +ZI) } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/STM32F091.sct b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/STM32F091.sct index e9c464ae..decffc33 100644 --- a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/STM32F091.sct +++ b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/STM32F091.sct @@ -8,7 +8,7 @@ LR_IROM1 0x08000000 0x00002000 { ; load region size_region *(InRoot$$Sections) .ANY (+RO) } - RW_IRAM1 0x20000000 0x00008000 { ; RW data + RW_IRAM1 0x200000C0 0x00007F40 { ; RW data - first 192 bytes reserved by OpenBLT .ANY (+RW +ZI) } } diff --git a/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/bin/openblt_stm32f091.axf b/Target/Demo/ARMCM0_STM32F0_Nucleo_F091RC_Keil/Boot/bin/openblt_stm32f091.axf index a3e130fdb3b90e8b24d98eaf3531740f60dd93c7..3aab9dd4cbeb80b240fe26887d0296f72b6bad43 100644 GIT binary patch delta 1910 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