单片机/MCU论坛
直播中

Rocketeer1

9年用户 47经验值
私信 关注
[问答]

飞思卡尔S12系列芯片,UCOS系统,关于不同内存模式下编译的问题

用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积分

回帖(1)

Rocketeer1

2018-6-14 11:13:27
哦有几天没来论坛了。。这个问题后来我自己解决了,通过汇编内部调用C函数(C函数实现提取低16位地址),再在汇编里进行地址的移位操作就可以了。

1 举报

更多回帖

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