微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 变量指针前面的两个减号是什么意思啊

变量指针前面的两个减号是什么意思啊

时间:10-02 整理:3721RD 点击:
各位大侠!
对于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)这个前面的“--”在这里是个什么意思呢?


--stk减地址!*(--stk)在取出减完地址中的内容。

推测这些(寄存器) xPSR 、“Entry Point”、 R14、 R12 、R3、R2。在物理地址上是连续的
参数pots给出这片连续地址的头
*(--stk)=XXX 就是挨个给寄存器赋值, --写前边表示先移动指针 再给指向的内容(寄存器)赋值,  "Entry Point"就是没连续 但离下一个R只差一个32位长度,也可 -- 赋值
这么写代码比较精简

堆栈的方向是由高到低存放的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top