<?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>topic manually write to stack in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662463#M40667</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;I'm working on a module to monitor the stack usage in my KE06 project (in KDS).&amp;nbsp; The concept is:&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;To detect the peak stack usage, the initialization function writes 0x00 to each &lt;EM&gt;unused&lt;/EM&gt; memory location in the stack.&amp;nbsp; It writes from the bottom of the stack up to the stack pointer.&amp;nbsp; Then when the stack monitor function is called, it goes through the stack and it counts the locations still with 0x00 (presumably these were unused).&amp;nbsp; It calculates the percentage of the stack used and saves this in a variable for “live” viewing via CAN.&amp;nbsp; This same strategy is used (and works well) on other projects.&amp;nbsp; I’m getting a hard fault here during the initialization, however.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;In the debugger, the stack pointer resolves correctly.&amp;nbsp; I get one single write to the bottom of the stack, and on the second write it hard faults.&amp;nbsp; Any thoughts as to why?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_START_ADDR&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; 0x20002C00&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// MCU stack starting address&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_TOP_ADDR&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; 0x20003000&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// MCU stack top address (see Memory mapping)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_ERASED_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// Value used to identify erase stack memory&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; &lt;STRONG&gt;STACK_Initialize&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; u32Addr;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;register&lt;/STRONG&gt; &lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; sp &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;asm&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="color: #2a00ff;"&gt;"&lt;SPAN style="text-decoration: underline;"&gt;sp&lt;/SPAN&gt;"&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;for&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; ( u32Addr=STACK_START_ADDR; u32Addr &amp;lt; sp; u32Addr++ )&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// Fill unused stack with erased values&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(&lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;*)u32Addr = STACK_ERASED_VALUE;&amp;nbsp;&amp;nbsp; //&amp;lt;----hard faults here the the second time through the loop&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 24 Oct 2016 19:21:01 GMT</pubDate>
    <dc:creator>dementeddigital</dc:creator>
    <dc:date>2016-10-24T19:21:01Z</dc:date>
    <item>
      <title>manually write to stack</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662463#M40667</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;I'm working on a module to monitor the stack usage in my KE06 project (in KDS).&amp;nbsp; The concept is:&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;To detect the peak stack usage, the initialization function writes 0x00 to each &lt;EM&gt;unused&lt;/EM&gt; memory location in the stack.&amp;nbsp; It writes from the bottom of the stack up to the stack pointer.&amp;nbsp; Then when the stack monitor function is called, it goes through the stack and it counts the locations still with 0x00 (presumably these were unused).&amp;nbsp; It calculates the percentage of the stack used and saves this in a variable for “live” viewing via CAN.&amp;nbsp; This same strategy is used (and works well) on other projects.&amp;nbsp; I’m getting a hard fault here during the initialization, however.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;In the debugger, the stack pointer resolves correctly.&amp;nbsp; I get one single write to the bottom of the stack, and on the second write it hard faults.&amp;nbsp; Any thoughts as to why?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_START_ADDR&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; 0x20002C00&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// MCU stack starting address&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_TOP_ADDR&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; 0x20003000&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// MCU stack top address (see Memory mapping)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;#define&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; STACK_ERASED_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// Value used to identify erase stack memory&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; &lt;STRONG&gt;STACK_Initialize&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; u32Addr;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;register&lt;/STRONG&gt; &lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; sp &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;asm&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="color: #2a00ff;"&gt;"&lt;SPAN style="text-decoration: underline;"&gt;sp&lt;/SPAN&gt;"&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;for&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; ( u32Addr=STACK_START_ADDR; u32Addr &amp;lt; sp; u32Addr++ )&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;// Fill unused stack with erased values&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(&lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;*)u32Addr = STACK_ERASED_VALUE;&amp;nbsp;&amp;nbsp; //&amp;lt;----hard faults here the the second time through the loop&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Oct 2016 19:21:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662463#M40667</guid>
      <dc:creator>dementeddigital</dc:creator>
      <dc:date>2016-10-24T19:21:01Z</dc:date>
    </item>
    <item>
      <title>Re: manually write to stack</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662464#M40668</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Are interrupts turned off?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using the correct stack for your part?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For GCC:&lt;BR /&gt;static __inline__ void *sp_get(void)&lt;BR /&gt;{&lt;BR /&gt; void *sp;&lt;/P&gt;&lt;P&gt;__asm__ __volatile__ ("mrs %0, msp" : "=r"(sp));&lt;/P&gt;&lt;P&gt;return( sp );&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Replace msp with psp if using other stack.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A version in pure C that makes Lint explode for returning the address of a local variable:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; * void *CheckStackDepth( void )&lt;BR /&gt; * {&lt;BR /&gt; * volatile uint32_t dummy; // Put a variable on the stack&lt;BR /&gt; * return( (void *) &amp;amp;dummy ); // Return its address - therefore the (approx.) present SP value&lt;BR /&gt; * }&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Obscure GCC syntax for setting Link and Stack pointers:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;static __inline__ void psp_set( void *setval )&lt;BR /&gt;{&lt;BR /&gt; __asm__ volatile ("msr psp, %[value]\n\t""dmb\n\t""dsb\n\t""isb\n\t"::[value]"r"(setval):);&lt;BR /&gt; __asm__ volatile ("" ::: "memory");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static __inline__ void lr_set(uint32_t setval)&lt;BR /&gt;{ __asm__ volatile ("mov lr, %[value]\n\t"::[value]"r"(setval):);&lt;BR /&gt; __asm__ volatile ("" ::: "memory");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Unless debugging is an obsession disable interrupts when doing any of the above operations:&lt;/P&gt;&lt;P&gt;See atomic.h.zip in this tread for the GCC ARM code to do save/restore of the IRQ state.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" class="link-titled" href="https://community.nxp.com/message/816609?commentID=816609#comment-816609" title="https://community.nxp.com/message/816609?commentID=816609#comment-816609"&gt;https://community.nxp.com/message/816609?commentID=816609#comment-816609&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Oct 2016 14:19:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662464#M40668</guid>
      <dc:creator>bobpaddock</dc:creator>
      <dc:date>2016-10-25T14:19:41Z</dc:date>
    </item>
    <item>
      <title>Re: manually write to stack</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662465#M40669</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm not sure if this is your issue:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your for loop isn't doing what you expect. You have incorrectly&amp;nbsp;used the pointer. &amp;nbsp;You have defined &lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; u32Addr. It should be defined as &lt;SPAN style="color: #005032;"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; *u32Addr. Without the&amp;nbsp;* in the definition, u32Addr is only incremented by one during the u32Addr++ in the for loop. By adding the * to the definition, the compiler then understands u32Addr is a pointer and gets incremented by 4 when you do the post increment in the&amp;nbsp;for loop. It should also remove the need for the cast in the for loops assignment.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black;"&gt;Your&amp;nbsp;for loop will cause 4 times as many writes&amp;nbsp;as needed, misaligned writes for 3 out of 4 of the&amp;nbsp;writes&amp;nbsp;and&amp;nbsp;corrupts your stack on the last 2 or 3 writes. You are doing a 4 byte write but only&amp;nbsp;incrementing the not&amp;nbsp;properly&amp;nbsp;defined&amp;nbsp;pointer by 1 byte.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Oct 2016 12:57:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662465#M40669</guid>
      <dc:creator>ndavies</dc:creator>
      <dc:date>2016-10-26T12:57:10Z</dc:date>
    </item>
    <item>
      <title>Re: manually write to stack</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662466#M40670</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, this is exactly the issue.&amp;nbsp; I found it yesterday just before I went home, and your comment confirms it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I fixed it by incrementing by 4 in the loop, but I see now _why_ the compiler didn't handle it the way I wanted.&amp;nbsp; I'll adjust the pointer definition and go back to incrementing by 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for the reply!&amp;nbsp; Very helpful!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Oct 2016 13:27:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/manually-write-to-stack/m-p/662466#M40670</guid>
      <dc:creator>dementeddigital</dc:creator>
      <dc:date>2016-10-26T13:27:10Z</dc:date>
    </item>
  </channel>
</rss>

