硬汉嵌入式论坛

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

[emWin] 关于三缓冲配置的问题

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2016-11-25 11:04:06 | 显示全部楼层 |阅读模式
各位老师,在V6-609_STemWin实验_三缓冲方式(RTOS)中,我发现LTDC_IRQHandler()中多了

#if uCOS_EN == 1
    CPU_SR_ALLOC();

    CPU_CRITICAL_ENTER();
    OSIntEnter();                        
    CPU_CRITICAL_EXIT();
#endif
.....

#if uCOS_EN == 1
    OSIntExit();                           
#endif
我想问下是不是带操作系统的话都要把这段加上,我发现没加这段代码好像也是可以的,这段与操作系统有关的代码有什么作用呀?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-11-25 11:21:55 | 显示全部楼层
对于uCOS-III和II,所有的中断,务必加上,保证规范化,统一化,标准化。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-11-25 11:31:10 | 显示全部楼层
uCOS-II和uCOS-III里面加上这个有三层含义
1. 做中断嵌套计数,保证退出到最后一层中断的时候再做任务切换,现在CM内核在中断嵌套方便做的很好了,可以有效保证退出到最低优先级的PendSV里面再执行任务切换,从这个意义上来说,此功能项可以省略了。
2. 做中断嵌套标记后,uCOS自带的API函数,部分是不支持在中断里面调用的,很多函数都会做这个标记的判断,防止用户用错了。像RTX,FreeRTOS都是两套函数,中断一种,任务里面一种,所以使用这两个系统就没有uCOS里面的这种东西,从这个意义上面来说,如果中断里面没有调用uCOS的API函数,此功能可以省略,但是用户在uCOS工程的中断里面调用了API函数,此功能最好不要省略,如果这个API将高优先级任务从挂起或者阻塞态恢复,此任务才可以得到及时执行。
3. 函数OSIntExit是实现中断级任务切换的关键,中断函数里面退出是否执行任务切换就靠他了,滴答定时器中断里面是必须加这个的。


总结:uCOS这么做也算是自己的一种处理策略,不像FreeRTOS,RTX都是中断和任务两套API函数,uCOS也要区分这个,怎么办呢,那就搞个嵌套计数。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2016-11-25 13:21:15 | 显示全部楼层
哦哦,非常感谢eric老师的解惑[s:151]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 18:44 , Processed in 0.893880 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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