用CW编译会有三种模式,large banked small,我以前一直用的后面两种,现在想用large memory model编译。芯片上跑的是UCOS系统。我发现在OSStartHighRdy这个函数里,有如下两句汇编语句,作用是将任务控制块的地址放到X里去,以方便后面再赋值给SP指针
ldx OSTCBHighRdy ;语句1 lds 0,x ;语句2
问题来了,因为之前用的banked和small模式,此模式下的指针是16位并且默认的就是逻辑地址。而现在改成large模式后,地址变成了24位并且是全局地址,而偏偏X和SP指针都只有16位,所以在上面的语句1赋值的时候就出错了,导致SP指针定位不到当前的任务堆栈。。
请问大家有没有什么方法能够解决这个问题呢?我最初是想把全局地址的低16位提取出来换算成逻辑地址,但是发现汇编里没有这样的语句。。。好困扰啊
已退回10积分
2018-6-14 11:13:27
哦有几天没来论坛了。。这个问题后来我自己解决了,通过汇编内部调用C函数(C函数实现提取低16位地址),再在汇编里进行地址的移位操作就可以了。
哦有几天没来论坛了。。这个问题后来我自己解决了,通过汇编内部调用C函数(C函数实现提取低16位地址),再在汇编里进行地址的移位操作就可以了。
1
举报