主题中讨论的其他器件: SYSBIOS、 UNIFLASH
工具/软件:Code Composer Studio
大家好、
我正在使用 ti RTOS 2.16.1.14和 xDC 工具 v 3.32和 tm4c129encpdt 微控制器。
之前我使用的是 CCS6、现在我使用的是 CCS9.1
在此 CCS9.1中,当我开始调试时,程序会进入 abort()函数,从而给出一些例外,即:
错误:E_noIsr:ID = 88、PC = 00044ec4
FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x00000000
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x00000000
正在终止执行...
当我检查 ROV>Hwi>Exception 并复制 SP、PC、ir 的值并将这些值放入 Registers > Core Registers > SP、PC、ir
我在这里的调试窗口中看到这是当前状态-
;===== TI_SYSBIOS_family_ARM_m3/Hwi_initStacks__E ===
;设置双堆栈
;仅在启用了任务处理时才调用
;否则,MSP =唯一的堆栈。
;MSP =处理程序(ISR 堆栈)
; PSP =线程(任务堆栈)
;
TI_SYSBIOS_family_ARM_m3/Hwi_initStacks__E:
asmfunc
按{LR}
R2夫人,xpsr
TST R2,#0xff;检查我们是否处于处理程序模式
Baq 1美元
;
;如果 CPU 在启动程序之前没有被复位,则在这里
;和最后一个
;程序在处理程序模式下停止。
;必须先解除处理程序模式
;配置控制寄存器
;
MOV R2、sp
Sub R2,#(8*4);为虚拟堆栈框腾出空间
MSR PSP、R2;更新 PSP
mvn lr、#2
STR r0、[R2、#0];在 ISR 堆栈上保存通过的 R0
MOV R1、#0x01000000;虚拟 xPSR、T 位被置位
STR R1、[R2、#28]
LDR R1、1美元地址
STR R1、[R2、#24];将 PC 退回到下面的$1
BX LR;从 ISR“返回”
1美元
弹出{LR} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 调试显示了这一点。
MOV R1、sp
MSR PSP、R1;PSP =任务堆栈
MSR MSP、r0;MSP = isrStack
MOV r0、#2
R1女士、CONTROL
MSR control,r0;立即拆分堆栈。
.if __TI_VFP_support__
LDR r0、fpccr;清除 APSEN 和 LSPEN
LDR R1,[r0];获取当前 fpccr
BIC R1、R1、#0xC0000000;清除高2位
STR R1,[R0];手动保存/恢复
.endif
BX LR;在 PSP 上返回
1美元地址
word 1美元
因此、基本而言 、ti_sysbios_family_arm_m3/hwi_initStacks__E 正在抛出错误。 我是对的吗?
这是什么意思? 每次我的代码到达那里。 在 CCS6中没有发生任何类似的情况。 但为什么在 CCS9.1中呢? CCS6和 CCS9.1有哪些变化?
Vince Todd 帮我解决这个问题。
谢谢


