<?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>LPC MicrocontrollersのトピックRe: LPC1788 + FreeRtos or RTX + bootlader + Ethernet</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523944#M6580</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by John Sinclair on Thu Nov 07 00:29:23 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Vasilij,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;first i recommended to reset the Link Register before you load the stack pointer (so is written in the LPC User Manual chapter 39.3.1.3.3 Link Register). So you have the same condition like an real reset :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;void jumpToProgram (uint32_t address)
{
&amp;nbsp;&amp;nbsp; MOV LR, #0xFFFFFFFF&amp;nbsp; ;Reset Link Register
&amp;nbsp;&amp;nbsp; LDR SP, [R0];Load new stack pointer address
&amp;nbsp;&amp;nbsp; LDR PC, [R0, #4];Load new program counter address
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But your problem I think is that the Vector Table mismatch. I found in some code examples to remap the Vector Table in the Bootloader. I think it is a bad idea!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Because:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In the user-program (second program) you have to ensure that the vector table is always on the same place.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think better is to set the Vector in the user-program in the SystemInit like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;extern void __Vectors(void);

void SystemInit (void)
{
...
SCB-&amp;gt;VTOR = (uint32_t) __Vectors;
...
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:05:11 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:05:11Z</dc:date>
    <item>
      <title>LPC1788 + FreeRtos or RTX + bootlader + Ethernet</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523943#M6579</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dfcbkbq on Wed Nov 06 23:10:18 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have try to develop an ethernet bootloader via tftp. First program (bootloader is placed in 0x0000-0xFFFF adress area) gets bin file from tftp-server and flashes it to from 0x10000 to the end of IROM. After all it jumps using this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
__asm void boot_jump( uint32_t address )
{
&amp;nbsp; LDR SP, [R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Load new stack pointer address
&amp;nbsp; LDR PC, [R0, #4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Load new program counter address
}

/**
 * @brief Jump to second program
 *
 * @param address
 */
void jumpToProgram (uint32_t address)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCB-&amp;gt;VTOR = address &amp;amp; 0x3FFFFF80;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boot_jump(address);
}

//some code here
...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // jumping to second program from bootloader
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(memcmp("jump\r", str, strlen("jump\r")) ==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; vTaskEndScheduler();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jumpToProgram(0x10000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
...
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;Second program is shifted to 0x10000 by compiler (IROM1 start parametr is 0x10000). It works if I don't use any RTOS in second program. If I do, then program crashes at starting sheduler (vTaskStartScheduler() in FreeRtos or os_sys_init() in RTX). Furthermore I figured out that if I exclude frome bootloader file EMAC_LPC177x_8x.c the second program starts working (sheduler starts) after jumping in it from bootloader. What is wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards Vasilij&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:05:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523943#M6579</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:05:10Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 + FreeRtos or RTX + bootlader + Ethernet</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523944#M6580</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by John Sinclair on Thu Nov 07 00:29:23 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Vasilij,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;first i recommended to reset the Link Register before you load the stack pointer (so is written in the LPC User Manual chapter 39.3.1.3.3 Link Register). So you have the same condition like an real reset :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;void jumpToProgram (uint32_t address)
{
&amp;nbsp;&amp;nbsp; MOV LR, #0xFFFFFFFF&amp;nbsp; ;Reset Link Register
&amp;nbsp;&amp;nbsp; LDR SP, [R0];Load new stack pointer address
&amp;nbsp;&amp;nbsp; LDR PC, [R0, #4];Load new program counter address
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But your problem I think is that the Vector Table mismatch. I found in some code examples to remap the Vector Table in the Bootloader. I think it is a bad idea!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Because:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In the user-program (second program) you have to ensure that the vector table is always on the same place.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think better is to set the Vector in the user-program in the SystemInit like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;extern void __Vectors(void);

void SystemInit (void)
{
...
SCB-&amp;gt;VTOR = (uint32_t) __Vectors;
...
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:05:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523944#M6580</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:05:11Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 + FreeRtos or RTX + bootlader + Ethernet</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523945#M6581</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dfcbkbq on Thu Nov 07 00:52:06 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;John Sinclair, thank you for your reply!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think your way to remap vector is great! I am going to use it. But I didn't exacly get what __Vectors is. I found it in startup_LPC177x_8x.s. I suppose it just pointer. But when I try to compile that:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
SCB-&amp;gt;VTOR = (uint32_t) __Vectors;
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I get that: drv\src\system_LPC177x_8x.c(466): error:&amp;nbsp; #20: identifier "__Vectors" is undefined.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; Haw should I declare it? extern uint32_t * __Vectors?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tryed this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
extern uint32_t * __Vectors;
void SystemInit (void)
{
//init code
...
SCB-&amp;gt;VTOR = (uint32_t) __Vectors;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;In this case after statring sheduler in second program starts to work&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;first program (bootloader)&lt;/STRONG&gt;&lt;SPAN&gt;. I suppose it just restarting (can't to debug this). What am I doing wrong?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:05:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523945#M6581</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:05:12Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 + FreeRtos or RTX + bootlader + Ethernet</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523946#M6582</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dfcbkbq on Thu Nov 07 01:11:12 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;John Sinclair&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You was right! Thank you! It is the Vector Table mismatch! When you advice to me to edit SystemInit, I saw that VTOR initialize in it too!&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void SystemInit (void)
{
//code code
...
#ifdef&amp;nbsp; __RAM_MODE__
&amp;nbsp; SCB-&amp;gt;VTOR&amp;nbsp; = 0x10000000 &amp;amp; 0x3FFFFF80;&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;lt; here it is! */
#else
&amp;nbsp; SCB-&amp;gt;VTOR&amp;nbsp; = 0x00000000 &amp;amp; 0x3FFFFF80;
#endif
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:05:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-FreeRtos-or-RTX-bootlader-Ethernet/m-p/523946#M6582</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:05:12Z</dc:date>
    </item>
  </channel>
</rss>

