标题: 移植ucos的问题~~ [打印本页]
作者: ticachen 时间: 2007-5-12 14:09 标题: 移植ucos的问题~~
根据邵贝贝老师的书上的移植代码将ucos移植到s12上,测试移植代码的时候发现程序执行到OSStartHighRdy()的时候过不去了
OSStartHighRdy的代码如下
void OSStartHighRdy(void)
{
OSTaskSwHook(); // Call Hook function
asm{
ldx OSTCBCur // Load the value in OSTCBCur or the TCB's address to x
lds 0,x// Load the value pointed by OSTCBCur to sp
inc // OSRunning = 1
pula
staa $30 //restore ppage from stack
nop
rti
}
}
用BDM调试的时候将程序单步执行到
staa $30 //restore ppage from stack
这句的时候assembly窗口的汇编语句变成了无止尽的staa 0x5a 无法跳出来了
这是怎么回事呢
我并没有添加任何任务,按照jean j.labrosse的书上说此时应该执行空闲任务OS_TaskIdle()
不明白staa $30里面的$30地址是什么的地址
作者: hfutBoy 时间: 2007-8-17 22:25
我也遇到了相同问题,程序到这个函数就跑飞了,不知道为什么。。。
作者: mmanyy 时间: 2007-8-18 09:51
0x0030为页地址寄存器,staa $30就是加载先前保存的页地址寄存器的内容,一般这样写比较好:
#if defined( __BANKED__) || defined(__LARGE__)
ldaa 0,sp
staa 0x0030
ins
#endif
当使用带有分页的Flash时,需要保存页地址寄存器的内容,你用的大概是不包含分页的单片机或者你创建新的project时选择了small而非banked模式.
解决方法是你需要在保存或是加载页地址寄存器内容的时候,加上如上所述的#if预处理指令,表示在有分页的时候使用该段保存或加载页地址寄存器内容的代码,无分页时不使用该段代码.
作者: hfutBoy 时间: 2007-8-20 15:24
楼上的老兄,我选择的是banked模式的。我感觉问题出现在我的.prm或.startup文件中。
我的.prm文件用的就是系统生成的,没有修改。
作者: hfutBoy 时间: 2007-8-20 15:31
而且,我在编译时,发现有一个警告,也可能是问题根源。
C12052 stack-pointer change not in debugging-information
这个可能是说SP在调试模式不能被修改,所以后面当面会出错,但是我在直接下载,然后运行发现也还是不行,而且那个老外的书里要求单步运行,岂不是有点矛盾。
作者: xueqixuan_1985 时间: 2008-12-23 16:34
我也遇到这个问题,大家谁知道怎么解决的吗?
作者: fayefayehoo 时间: 2008-12-24 09:02
把你这个函数定义到NON_BANKED里试一下,改ppage的操作,函数要是不在固定页里,肯定出错。
作者: xueqixuan_1985 时间: 2008-12-26 10:07 标题: 关于内存模式
我试了一下,发现如果新建工程的时候选small内存模式就可以运行,选banded 内存模式运行到OSStartHighRdy()中的最后一句rti返回时就跑飞了,这是为什么呢?
作者: xueqixuan_1985 时间: 2008-12-26 14:13
终于跑起来了,原来small和banked模式在堆栈初始化时是不一样的
作者: kent8411 时间: 2008-12-27 10:22
hehe
作者: quanyonggao 时间: 2009-1-7 20:29
请问楼上:有没有Assembler_HC12.PDF
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |