ARM技术论坛
直播中

王凯

8年用户 1388经验值
私信 关注
[问答]

ADS调试ARM板+uCOS-ii出错求大神解决

小弟刚上手arm+uC/OS-ii,现在有个2410的开发板,上面有个wince的系统。

目前还没有移植其他系统,是直接在SDRAM上跑uc和一些简单的任务。

但是ADS在编译和make之后,debug后,打开了AXD和JTAG,向板中下载程序

main中第一个创建的一个mainTask可以运行,串口也有反应,这个mainTask中再创建任务就出错了

错误提示:“Processor ARM79_0 raised an exception.Cause:Data abort”

求大神解决~
main函数之后,运行到
void OSStart (void)
{
INT8U y;
INT8U x;
if (OSRunning == FALSE) {
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
OSPrioHighRdy = (INT8U)((y << 3) + x);
OSPrioCur = OSPrioHighRdy;
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSTCBCur = OSTCBHighRdy;
OSRunning = TRUE;//softmcu modified 20030222
OSStartHighRdy();
}
}
然后就是后面的汇编那一段,当然前面的mmu映射改到了NANDflash的地址
MMU_SetMTT(0x00000000,0x07f00000,0x30000000,RW_CNB); //bank0

回帖(3)

王波

2022-7-27 15:01:11
是不是堆栈溢出了?或者任务优先级设置不正确,不要设成0或63
举报

王凯

2022-7-27 15:01:22
优先级是没错的,只有两个task,一个19,一个20,堆栈这个东西不懂:
OSStartHighRdy
LDR r4, addr_OSTCBCur        ; Get TCB address
LDR r5, addr_OSTCBHighRdy
LDR r5, [r5] ; get stack pointer
LDR sp, [r5] ; switch to the new stack
STR r5, [r4] ; set new current task TCB address
LDMFD sp!, {r4}       
MSR SPSR_cxsf, r4  ;//程序停在这//
LDMFD sp!, {r4}       
MSR CPSR_cxsf, r4
LDMFD        sp!, {r0-r12, lr, pc }
举报

王波

2022-7-27 15:01:32
栈都不懂是没法移植的,arm不同模式有不同的堆栈空间,定时器中断后栈指针就变到irq模式的栈区,中断返回后栈指针又回到用户模式或管理模式或系统模式,回到那种模式得看你创建的任务工作在哪种模式,所以编写任务切换那部分代码是很麻烦的,要不停地切换栈指针和处理器工作模式
举报

更多回帖

发帖
×
20
完善资料,
赚取积分