OpenEdv-开源电子网

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

嵌入式实时操作系统μCOS-II原理及应用-任哲之阅读笔记

[复制链接]

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
发表于 2018-4-27 15:24:59 | 显示全部楼层 |阅读模式
这是我学习μCOS-II的笔记,选择任哲的课本是因为在网上找的PDF较邵贝贝的清晰,学习下来,感觉部分内容讲的还是挺好的,书中有大量使用教程
目前状态:
1、对CPU的控制权如何在低优先级的任务不主动放弃使用权的情况下转换到高优先级的任务,对这一过程的具体实现,不是太明白
2、对如何移植,也不懂,没有亲手实践过,直接用的*火的

新建文本文档.rar

296 Bytes, 下载次数: 131

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

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-7-9 15:27:59 | 显示全部楼层
肥油玉帝 发表于 2018-7-9 10:51
现在又碰到了一个问题:当main函数return之后,程序是怎样运行的?

执行不到return .打开多任务 就进入多任务里面了.  就开始跑了~  其他的任务里面 应该有延时或者逻辑上的 循环来避免都不运行的.
回复 支持 1 反对 0

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-6-25 10:23:59 | 显示全部楼层
本帖最后由 肥油玉帝 于 2018-7-2 08:55 编辑

终于搞懂:在低优先级任务不主动放弃CPU的使用权的情况下,高优先级的任务如何得到执行的问题在uC/OS里,有两个函数可以实现任务的切换:
  • 任务级切换函数OSCtSw()
  • 中断级任务切换函数OSIntCtSw()

系统时钟的中断服务函数调用的退出中断服务函数OSIntExit()里面,可以看到OSIntCtxSw(),所以只要是高优先级任务的延时到了,系统就会“暴力打断”正在运行的低优先级任务,转而去执行高优先级任务


回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-9 10:51:08 | 显示全部楼层
现在又碰到了一个问题:当main函数return之后,程序是怎样运行的?
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-17 10:48:31 | 显示全部楼层
本帖最后由 肥油玉帝 于 2018-7-17 10:50 编辑
肥油玉帝 发表于 2018-7-9 10:51
现在又碰到了一个问题:当main函数return之后,程序是怎样运行的?

我知道了,是应为在调用过OSStart()函数之后,CPU就转去运行μCOS-II操作系统了
OSStart()的官方英文注释是(前半部分):
This function is used to start the multitasking process which lets uC/OS-II manages the  task that you have created.
OSStart()具体内容是:
[mw_shl_code=c,true]void  OSStart (void)
{
    if (OSRunning == OS_FALSE) {
        OS_SchedNew();                               /* Find highest priority's task priority number   */
        OSPrioCur     = OSPrioHighRdy;
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
        OSTCBCur      = OSTCBHighRdy;
        OSStartHighRdy();                            /* Execute target specific code to start task     */
    }
}[/mw_shl_code]

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 06:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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