OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5728|回复: 2

正点原子战舰板-uc/OS-ii例程的一些疑问

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-10-8
在线时间
0 小时
发表于 2013-3-11 10:57:57 | 显示全部楼层 |阅读模式
战舰板的uc/OS-ii的例程中,os_cpu_a.asm中任务切换全部使用的是R4,R5寄存器,如下
OSStartHighRdy
        LDR     R4, =NVIC_SYSPRI2      ; set the PendSV exception priority
        LDR     R5, =NVIC_PENDSV_PRI
        STR     R5, [R4]

        MOV     R4, #0                 ; set the PSP to 0 for initial context switch call
        MSR     PSP, R4

        LDR     R4, =OSRunning         ; OSRunning = TRUE
        MOV     R5, #1
        STRB    R5, [R4]

                                       ;切换到最高优先级的任务
        LDR     R4, =NVIC_INT_CTRL     ;rigger the PendSV exception (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]

        CPSIE   I                      ;enable interrupts at processor level
OSStartHang
        B       OSStartHang            ;should never get here
我以前看过说“使用了R4和R5,会有严重问题 

原因是一个任务调用Delay,最后切换任务会调用OSCtxSw,R4&R5会被破坏,任务返回时可能造成局部变量被改变,不知道是怎么回事 ,还请高手指教啊






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-11 11:20:16 | 显示全部楼层
回复【楼主位】caoxh1988:
---------------------------------
一直这么用,没发现严重问题哦...
我们公司产品都这么做的了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-10-8
在线时间
0 小时
 楼主| 发表于 2013-3-11 13:27:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢原子哥,我看到的那个上面说的是这个函数会照成问题,如下
OSCtxSw
        LDR     R4, =NVIC_INT_CTRL      ; trigger the endSV exception (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
        BX      LR
但是,战舰板的是这样的
OSCtxSw
PUSH    {R4, R5}
        LDR     R4, =NVIC_INT_CTRL   ;触发PendSV异常 (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
POP     {R4, R5}
        BX      LR
多了前面的PUSH    {R4, R5},和后面的 OP     {R4, R5};不知道这两句汇编是什么意思啊,应该是这两句汇编做了保存,所以战舰版
的uc/OS-ii一直很稳定吧
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-23 14:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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