完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大侠!
对于UCOSii里面有下面的堆栈初始化。 OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt) ////堆栈初始化。 { OS_STK *stk; (void)opt; /* 'opt' is not used, prevent warning */ // 'opt' 这里并没有使用 ,防止编译器报错。 stk = ptos; /* Load stack pointer */ //加载栈指针。是32位指针。 /* Registers stacked as if auto-saved on exception */ *(stk) = (INT32U)0x01000000L; /* xPSR */ *(--stk) = (INT32U)task; /* Entry Point */ *(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will cause fault if ever used)*/ *(--stk) = (INT32U)0x12121212L; /* R12 */ *(--stk) = (INT32U)0x03030303L; /* R3 */ *(--stk) = (INT32U)0x02020202L; /* R2 */ *(--stk) = (INT32U)0x01010101L; /* R1 */ *(--stk) = (INT32U)p_arg; /* R0 : argument */ /* Remaining registers saved on process stack */ *(--stk) = (INT32U)0x11111111L; /* R11 */ *(--stk) = (INT32U)0x10101010L; /* R10 */ *(--stk) = (INT32U)0x09090909L; /* R9 */ *(--stk) = (INT32U)0x08080808L; /* R8 */ *(--stk) = (INT32U)0x07070707L; /* R7 */ *(--stk) = (INT32U)0x06060606L; /* R6 */ *(--stk) = (INT32U)0x05050505L; /* R5 */ *(--stk) = (INT32U)0x04040404L; /* R4 */ return (stk); } *(--stk)这个前面的“--”在这里是个什么意思呢? |
|
相关推荐
3个回答
|
|
--stk减地址!*(--stk)在取出减完地址中的内容。
|
|
|
|
推测这些(寄存器) xPSR 、“Entry Point”、 R14、 R12 、R3、R2。。。。在物理地址上是连续的
参数pots给出这片连续地址的头 *(--stk)=XXX 就是挨个给寄存器赋值, --写前边表示先移动指针 再给指向的内容(寄存器)赋值, "Entry Point"就是没连续 但离下一个R只差一个32位长度,也可 -- 赋值 这么写代码比较精简 |
|
|
|
堆栈的方向是由高到低存放的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
478 浏览 0 评论
stm32f407vet6+LAN8720A调试以太网遇到软件复位失败问题
842 浏览 0 评论
使用STM32CubeMX对红外波形进行GPIO输出,并LED显示
410 浏览 0 评论
453 浏览 0 评论
1148 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-9 02:04 , Processed in 0.652212 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191