<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LPCXpresso IDE FAQs中的主题 Creating an LPC valid image checksum directly in the image</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE-FAQs/Creating-an-LPC-valid-image-checksum-directly-in-the-image/m-p/469247#M36</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;As described in the FAQ "&lt;A href="https://community.nxp.com/thread/389046" rel="nofollow noopener noreferrer" target="_blank"&gt;LPC Image Checksums&lt;/A&gt;", NXP LPC MCUs use a word in the vector table of the CPU to store a checksum that is examined by the bootloader to identify that the code in Flash is a valid image.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This word is set automatically when downloading an AXF image using the LPCXpresso flash drivers. But if a binary image is to be programmed via other means then, in LPCXpresso IDE, v7.8.0 and earlier, a utility needs to be run as a post-build step to patch the appropriate value into the binary.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, LPCXpresso IDE v7.9.0 and later provide a mechanism to allow the checksum value to be directly written into the (AXF) image at build time - thus removing the need for the post build step. This is achieved in two steps:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2 id="toc-hId-1707650750" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;Startup code&lt;/H2&gt;&lt;P&gt;The startup code generated by LPCXpresso IDE 7.9.0 and later has been modified so that the value of the linker symbol &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt; is placed in the appropriate location of the vector table.&lt;/P&gt;&lt;PRE style="font-family: monospace, serif; font-size: 12px; color: #646464; padding-left: 30px;"&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;WEAK extern void __valid_user_code_checksum(); // &amp;lt;- *** NEW IN LPCXPRESSO 7.9.0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;void (* const g_pfnVectors[])(void) = {&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Core Level - CM3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;_vStackTop,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The initial stack pointer&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ResetISR,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The reset handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NMI_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The NMI handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HardFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The hard fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MemManage_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The MPU fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The bus fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UsageFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The usage fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __valid_user_code_checksum,&amp;nbsp;&amp;nbsp;&amp;nbsp; // LPC MCU Checksum &amp;lt;- *** NEW IN LPCXPRESSO 7.9.0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reserved&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;This means that if you have an existing project created before LPCXpresso IDE v7.9.0, you will need to update the startup file to use the latest version.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also note that the vector tables entries for Cortex-M0/M0+ parts will differ slightly from that displayed above, as they have few defined fields in the vector table.&lt;/P&gt;&lt;H2 id="toc-hId--844506211" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;&lt;/H2&gt;&lt;H2 id="toc-hId-898304124" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;Linker script&lt;/H2&gt;&lt;P&gt;The LPCXpresso IDE v7.9.0 manged linker script mechanism has been enhanced so that it generates the appropriate value for the &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt;, which is then embedded into the generated image by the startup code (as above). This value is actually calculated from the values of the proceeding vector table entries:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;PROVIDE(__valid_user_code_checksum = 0 - &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (_vStackTop &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (ResetISR + 1) &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (NMI_Handler + 1) &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (HardFault_Handler + 1)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)&amp;nbsp;&amp;nbsp; /* MemManage_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BusFault_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt; that the definition of __valid_user_code_checksum in the linker script generated for Cortex-M0/M0+ parts will differ slightly from that displayed above, as they have fewer defined entries in the vector table.&lt;/P&gt;&lt;HR style="color: #646464; font-family: Arial, sans-serif; font-size: 12px;" /&gt;&lt;H2 id="toc-hId--1653852837" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;&lt;/H2&gt;&lt;H2 id="toc-hId-88957498"&gt;&lt;SPAN style="color: #eb7a3d;"&gt;Notes&lt;/SPAN&gt; &lt;/H2&gt;&lt;UL&gt;&lt;LI&gt;The new checksum mechanism will only function if the project's start up file places the __valid_user_code_checksum at the appropriate location in the vector table AND the managed linker script mechanism is enabled for the project.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The absence of __valid_user_code_checksum in the vector table will not cause a problem, but the linker will be unable to automatically place the checksum into the image. Similarly, there will not be a problem if &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt;&amp;nbsp; is defined, but the managed linker script mechanism is not used.&lt;/LI&gt;&lt;LI&gt;The new checksum mechanism is only supported for Cortex-M projects. For ARM7/9 based MCUs, the separate checksum utlity must still be used to patch the binary.&lt;/LI&gt;&lt;/UL&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 31 Mar 2016 18:04:58 GMT</pubDate>
    <dc:creator>lpcware-support</dc:creator>
    <dc:date>2016-03-31T18:04:58Z</dc:date>
    <item>
      <title>Creating an LPC valid image checksum directly in the image</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE-FAQs/Creating-an-LPC-valid-image-checksum-directly-in-the-image/m-p/469247#M36</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;As described in the FAQ "&lt;A href="https://community.nxp.com/thread/389046" rel="nofollow noopener noreferrer" target="_blank"&gt;LPC Image Checksums&lt;/A&gt;", NXP LPC MCUs use a word in the vector table of the CPU to store a checksum that is examined by the bootloader to identify that the code in Flash is a valid image.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This word is set automatically when downloading an AXF image using the LPCXpresso flash drivers. But if a binary image is to be programmed via other means then, in LPCXpresso IDE, v7.8.0 and earlier, a utility needs to be run as a post-build step to patch the appropriate value into the binary.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, LPCXpresso IDE v7.9.0 and later provide a mechanism to allow the checksum value to be directly written into the (AXF) image at build time - thus removing the need for the post build step. This is achieved in two steps:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2 id="toc-hId-1707650750" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;Startup code&lt;/H2&gt;&lt;P&gt;The startup code generated by LPCXpresso IDE 7.9.0 and later has been modified so that the value of the linker symbol &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt; is placed in the appropriate location of the vector table.&lt;/P&gt;&lt;PRE style="font-family: monospace, serif; font-size: 12px; color: #646464; padding-left: 30px;"&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;WEAK extern void __valid_user_code_checksum(); // &amp;lt;- *** NEW IN LPCXPRESSO 7.9.0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;void (* const g_pfnVectors[])(void) = {&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Core Level - CM3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;_vStackTop,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The initial stack pointer&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ResetISR,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The reset handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NMI_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The NMI handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HardFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The hard fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MemManage_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The MPU fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The bus fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UsageFault_Handler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The usage fault handler&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __valid_user_code_checksum,&amp;nbsp;&amp;nbsp;&amp;nbsp; // LPC MCU Checksum &amp;lt;- *** NEW IN LPCXPRESSO 7.9.0&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reserved&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;&lt;STRONG&gt; :&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;This means that if you have an existing project created before LPCXpresso IDE v7.9.0, you will need to update the startup file to use the latest version.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also note that the vector tables entries for Cortex-M0/M0+ parts will differ slightly from that displayed above, as they have few defined fields in the vector table.&lt;/P&gt;&lt;H2 id="toc-hId--844506211" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;&lt;/H2&gt;&lt;H2 id="toc-hId-898304124" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;Linker script&lt;/H2&gt;&lt;P&gt;The LPCXpresso IDE v7.9.0 manged linker script mechanism has been enhanced so that it generates the appropriate value for the &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt;, which is then embedded into the generated image by the startup code (as above). This value is actually calculated from the values of the proceeding vector table entries:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;PROVIDE(__valid_user_code_checksum = 0 - &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (_vStackTop &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (ResetISR + 1) &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (NMI_Handler + 1) &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (HardFault_Handler + 1)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)&amp;nbsp;&amp;nbsp; /* MemManage_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BusFault_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined */ &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt; that the definition of __valid_user_code_checksum in the linker script generated for Cortex-M0/M0+ parts will differ slightly from that displayed above, as they have fewer defined entries in the vector table.&lt;/P&gt;&lt;HR style="color: #646464; font-family: Arial, sans-serif; font-size: 12px;" /&gt;&lt;H2 id="toc-hId--1653852837" style="font-family: Lato, sans-serif; color: #e66e08; font-size: 18px; background: 0 50% #ffffff;"&gt;&lt;/H2&gt;&lt;H2 id="toc-hId-88957498"&gt;&lt;SPAN style="color: #eb7a3d;"&gt;Notes&lt;/SPAN&gt; &lt;/H2&gt;&lt;UL&gt;&lt;LI&gt;The new checksum mechanism will only function if the project's start up file places the __valid_user_code_checksum at the appropriate location in the vector table AND the managed linker script mechanism is enabled for the project.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The absence of __valid_user_code_checksum in the vector table will not cause a problem, but the linker will be unable to automatically place the checksum into the image. Similarly, there will not be a problem if &lt;STRONG&gt;__valid_user_code_checksum&lt;/STRONG&gt;&amp;nbsp; is defined, but the managed linker script mechanism is not used.&lt;/LI&gt;&lt;LI&gt;The new checksum mechanism is only supported for Cortex-M projects. For ARM7/9 based MCUs, the separate checksum utlity must still be used to patch the binary.&lt;/LI&gt;&lt;/UL&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Mar 2016 18:04:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE-FAQs/Creating-an-LPC-valid-image-checksum-directly-in-the-image/m-p/469247#M36</guid>
      <dc:creator>lpcware-support</dc:creator>
      <dc:date>2016-03-31T18:04:58Z</dc:date>
    </item>
  </channel>
</rss>

