硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8537|回复: 4
收起左侧

[μCGUI] 记录uCOS-II源码理解和使用中的问题

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107080
QQ
发表于 2013-2-19 17:14:13 | 显示全部楼层 |阅读模式
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}    关中断
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}        开中断

OS_CPU_SR_Save
    MRS     R0, PRIMASK                                      
    CPSID   I                                                   
    BX      LR
初看这里以为没有打开屏蔽掉的中断。
OS_CPU_SR_Restore
    MSR     PRIMASK, R0       //通过此指令已经将其打开                                

    BX      LR   
1.png
2.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107080
QQ
 楼主| 发表于 2013-2-26 21:07:35 | 显示全部楼层
如果卡在
    OSStartHang
                   B       OSStartHang     
多半是因为
DCD     OS_CPU_PendSVHandler       ; PendSV Handler
DCD     SysTick_Handler                       ; SysTick Handler      
一定要保证启动文件里面和UCOS-II中的名字一致
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107080
QQ
 楼主| 发表于 2013-3-2 15:30:14 | 显示全部楼层
深刻的理解UCOS任务切换的一个关键认识,可能这个认识有点不全面,有待于以后深入。
(1)xxxPend函数,除了时钟节拍中断的其它中断退出时以及OSTimeDly等主要完成高优先级向低优先级的任务切换
        也就是任务级的任务切换,这种任务切换主要发生在两个时钟节拍之间。
(2)高优先级对低优先级的任务抢占,主要发生在时钟节拍中断退出的时候,以及xxxPost函数中(低--高 高---低 都有可能)。

1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107080
QQ
 楼主| 发表于 2013-3-3 19:53:22 | 显示全部楼层
设计硬件调度器的时候,这个空闲任务很重要,其它任务被挂起以后,default状态指向这个空闲任务
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107080
QQ
 楼主| 发表于 2013-3-8 20:45:21 | 显示全部楼层
(1)RTOS的核心是调度内核,调度内核的核心又是任务切换,任务切换的核心就是保存寄存器,恢复寄存器
(2)由于调度内核是RTOS的核心,所以调度内核设计好以后,其它的组件,比如信号量,消息队列 等,都可
         以围绕着这个调度内核来实现。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 08:51 , Processed in 0.185788 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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