主题中讨论的其他器件: UNIFLASH、 ENERGIA、 CC3200
在具有 CC3220S 的定制板中、我需要能够启动2个不同的应用
在闪存中、这2个应用程序的可执行文件必须被分开(App1.bin 和 App2.bin)
为此、我开发了一个定制的二级引导加载程序、在确定必须执行哪些应用程序后、将其加载到 RAM 中并 运行
- 我的 Booloader 占用地址0x20004000-0x2001285F
- 应用程序从地址0x20014000开始驻留(因此与我的引导不存在重叠)
- .resetVecs 元素放置在0x20014000中(链接器 cmd 文件中强制的值)
- resetISR 位于0x200302d5 (从映射文件读取的值)中
我的启动成功启动、并从0x20014000开始将 App1从闪存复制到 RAM
要运行应用、我使用以下汇编器行、强制寄存器 R0 = 0x20014000 (=应用程序.resetVecs 的地址)
- ldr sp、[r0]->将堆栈指针重置为初始值
- 添加 r0、r0、#4 ->将 R0增加4 (R0 = 0x20014004)
- LDR R1、[r0]->在0x20014004中、有应用程序的复位 ISR 的地址、该地址在 R1中复制
- BX R1 -->跳转至包含在 R1中的地址(然后应用程序的 resetISR 的地址存储在程序计数器中)
使用 Code Composer Studio 12中的内置调试器时、一切看起来都正常、但应用程序无法运行...
我使用 UniFlash 8将所有内容集成到闪存中
- 我的引导加载程序是 MCU 映像
- 该应用程序作为用户文件插入到/sys/app1.bin 中(mu boot 用于加载该应用程序的相同路径)
编程并重新启动后:
- 启动开始
- 应用程序加载到 RAM 中(通过 CRC32控制来确保正确加载)
- 先前的汇编器行已 成功执行
(笑声) 但应用程序无法启动。
对于应用、我尝试将调试版本和 MCU+Image 版本保存在闪存中、但没有任何变化
我出了什么问题?
谢谢、Andrea