找回密码
 立即注册
查看: 55|回复: 2

请教杨老师FreeRTOS中的SPX指针存取问题

[复制链接]
  • TA的每日心情
    开心
    2024-3-22 08:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    9

    主题

    40

    回帖

    279

    积分

    等待验证会员

    积分
    279
    发表于 2024-4-2 10:06:06 | 显示全部楼层 |阅读模式
    系统中sp指针的保存和恢复如下:

    /* Saves the stack pointer for one task into its TCB. */
    #define portSAVE_SPX()                      \
    {                                           \
        __asm   { MOV   DR0,DR60    }           \
        __asm   { MOV   DR4,pxCurrentTCB    }   \
        __asm   { MOV   @WR6+0x2,WR2        }   \
    }

    /* Restores the stack from the new TCB read to
    run the task. */
    #define portRESTORE_SPX()                   \
    {                                           \
        __asm   { MOV   DR4,pxCurrentTCB    }   \
        __asm   { MOV   WR2,@WR6+0x2        }   \
        __asm   { XRL   WR0,WR0     }           \
        __asm   { MOV   DR60,DR0    }           \
    }

    为什么不直接【 __asm   { MOV   pxCurrentTCB ,DR60    }   】和【__asm   { MOV   DR60,pxCurrentTCB }  】呢?
    原文中SPX的操作我理解的仅仅是对低字节,高字节有其他信息么?

    回复 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10908
    发表于 2024-4-2 12:42:52 | 显示全部楼层
    本帖最后由 杨为民 于 2024-4-2 13:15 编辑

    (1)关于SPX寄存器,参考下图

    Fig_01_寄存器堆.jpg

    Fig_02_寄存器映射.jpg

    确实,SPX只有低16位有效,它对应的存储区域为EDATA空间


    (2)“为什么不直接【 __asm   { MOV   pxCurrentTCB ,DR60    }   】和【__asm   { MOV   DR60,pxCurrentTCB }  】呢?”
    如果是“MOV   pxCurrentTCB ,DR60”和“MOV   DR60,pxCurrentTCB”,在汇编语言中是“直接寻址”,适合于“pxCurrentTCB”是简单变量的情况数据存放在地址为pxCurrentTCB地方


    (3)由于“pxCurrentTCB”是C语言中的指针变量,“__asm   { MOV   @WR6+0x2,WR2        }”和“__asm   { MOV   WR2,@WR6+0x2        } ”在汇编语言中是“间接寻址”,适合于“pxCurrentTCB”是指针变量的情况。
    这里地址为pxCurrentTCB地方存放的是“指向数据存放地址”,而真正的数据存放在地址为@pxCurrentTCB的地方。
    比如上面“__asm   { MOV   @WR6+0x2,WR2        }”指令中的WR6寄存器中,存放的是“pxCurrentTCB”在EDATA里面的内容的低16位指向了在EDATA中现行任务的TCB表的首地址(这个地址将存放现行任务的4字节的系统堆栈指针SPX),
    而这条指令只存了SPX的低16位,这对于64KB的EDATA空间已经够了。



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 08:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    9

    主题

    40

    回帖

    279

    积分

    等待验证会员

    积分
    279
     楼主| 发表于 2024-4-2 13:21:24 | 显示全部楼层
    明白了,谢谢杨老师
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 08:15 , Processed in 0.060696 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表