|
最近在做LiteOS系统的移植,需要将任务地址(函数地址)赋值给任务堆栈,但是在过程中发现,被赋值的变量会比实际的函数地址多1。比如有函数地址为0x080033D8,将其赋值给变量a后,则变量a的结果会变成0x080033D9,并且将a和该函数地址做比较结果也是相等的,具体现象如下图:
*pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ 即它特地使用了portSTART_ADDRESS_MASK在任务地址赋值的时候根据用户设置,决定最低位是否清零。 因此个人推断: ARM会根据T标志,在对PC寄存器的数据操作时,会相应地操作LSB,如果T标志为1则将PC的值复制到目标寄存器后同时将保障结果的LSB为1. 不知道这种推断是否正确,哪位朋友知道相关的权威资料? |
|
对于cortex M核的芯片,任何跳转相关地址的最低位,即BIT0都应是1。该位表示将用到的的指令集为Thumb指令。这点在ARM公司提供的各内核的Generic User Guide里 有提及:Bit[0] of any address you write to thePC with a BX, BLX, LDM,LDR, or POPinstruction must be 1for correctexecution, because this bit indicates the required instruction set, and theCortex-M4 processoronly supports Thumb instructions |
在擦除flash时 同时挂起中断 是否会造成卡死以及相关的卡死机制
STEVAL-IDP004V2 IO-LINK 开发套件 使用时间超出10000分钟限制,提示LICENCE_ERROR 需要如何去获取永久LICENCE 权限
FLASH擦除轮询等待时CPU真的会轮询吗
HAL_I2C_Mem_Read 一直返回 BUSY
touchGFX仪表只显示表盘,没有表的指针是咋回事?
STM32F103C8T6 上电后无法通过串口发出数据的问题?
CUBECTL怎么下载,下载页面点击获取软件就跳出登录界面,点击登录就回到获取软件界面,一直循环,软件下载的入口到底在哪里?
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
询问电源纹波对芯片的影响
微信公众号
手机版