<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[【FAQ】全志XR806芯片 汇编代码调试技巧]]></title><description><![CDATA[<p dir="auto"><strong>1.问题背景</strong><br />
问题平台：XR806 + RTOS</p>
<p dir="auto"><strong>2.问题描述</strong><br />
XR806（M33内核）适配新的RTOS时，沿用M4F的启动代码后出现了系统奔溃，但是expection显示的PC地址和LR地址都被修改，无法准确判断哪条语句导致的错误。</p>
<p dir="auto"><strong>3.问题分析</strong></p>
<ul>
<li>通过log定位到是启动代码出现了问题。</li>
<li>arm汇编中，可利用b .进入死循环。</li>
<li>在汇编中可以利用以下代码打印log：</li>
</ul>
<pre><code>//.c文件中插入
void AsmPrint(void)
{
    printf("var = %#x\n",PrintMagic);
}
#汇编代码中插入以下代码查看R0的值
    LDR R8,=PrintMagic
    str R0,[R8]
    LDR R8,=AsmPrint
    bx R8
</code></pre>
<ul>
<li>最后发现汇编代码正常，但在运行第一个任务时系统奔溃。原因为M33内核新增了PSPlimit功能，任务栈超过了设定值时会直接触发usage Fault。同时RTOS在系统启动前修改了PC地址和LR地址，导致exception中无法正确显示PC地址和LR地址。</li>
</ul>
<p dir="auto"><strong>4.解决方法</strong><br />
使用__set_PSPLIM可以设置PSPlimit地址，在不确定PSP限制时，可以__set_PSPLIM(0)取消这个功能，MSP也是相同道理。</p>
]]></description><link>https://bbs.aw-ol.com/topic/741/faq-全志xr806芯片-汇编代码调试技巧</link><generator>RSS for Node</generator><lastBuildDate>Mon, 18 May 2026 08:50:23 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/741.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Dec 2021 01:51:54 GMT</pubDate><ttl>60</ttl></channel></rss>