硬汉嵌入式论坛

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

[ThreadX视频教程] 第9期ThreadX视频教程:自制个微秒分辨率任务调度实现方案(2023-10-11)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2023-10-11 12:03:09 | 显示全部楼层 |阅读模式
说明:
1、一般应用,我们都会将任务RTOS系统时钟节拍(心跳)设置为1ms,但如果直接把RTOS的系统时钟节拍设置为1us,系统负担非常大,而且很多RTOS也做不到100MHz主频下,1us切换一次任务,导致RTOS没有时间处理应用任务
2、这个机制主要是用来替换大家的程序里面不支持任务切换的DelayUS微秒延迟的API,让其也支持释放CPU权限来支持任务调度, 延迟时间到后,还可以根据自己的优先级情况返回执行。当前将RTOS本身的延迟API,比如tx_thread_sleep替换为新作的API实现也是没问题的
3、RTOS的通信组件,信号量,消息队列,事件标志等不需要微秒分辨率的延迟,因为紧急的中断调用这些通信API,会让就绪的最高优先级的等待通信任务立即得到执行。
4、这种方式还有有个优势,可以更好的降低CPU利用率。

视频教程:

https://www.bilibili.com/video/BV1Yh4y1z7k3/



实现方法:

需要的,做替换,不需要的不用替换。

12456.png
任务信息统计:
12.png

配套例子
程序中将任务的延迟和DS18B20的微秒延迟都改成新作的API osDeleyUS实现

链接:https://pan.baidu.com/s/1QxnwR5hbAugZ83zldSqyUg  提取码:7q3i


评分

参与人数 1金币 +20 收起 理由
yunqi + 20 很给力! 貌似只能信号量,其它消息标志、互.

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-10-11 12:16:20 | 显示全部楼层
制作完毕。
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2023-10-11 12:20:00 | 显示全部楼层

这么牛x 哈

不知道这样做长期工作稳定不 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-10-11 12:21:19 | 显示全部楼层
hpdell 发表于 2023-10-11 12:20
这么牛x 哈

不知道这样做长期工作稳定不 ?

还行,有时间你也测评下试试效果。
回复

使用道具 举报

10

主题

34

回帖

64

积分

初级会员

积分
64
发表于 2023-10-11 13:23:12 | 显示全部楼层
感谢老师的分享
回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
发表于 2023-10-11 13:26:59 | 显示全部楼层
这个方式值得借鉴,rtos下面使用DMA方式的SPI、操作SD卡等,在文件系统也是死等判断完成标志和状态,这种是不是也可优化下,既能够相对快的状态完成又能调度出去执行别的任务
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2023-10-11 16:16:00 | 显示全部楼层
浴火重生 发表于 2023-10-11 13:26
这个方式值得借鉴,rtos下面使用DMA方式的SPI、操作SD卡等,在文件系统也是死等判断完成标志和状态,这种是 ...

这个可以有,
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2023-10-11 16:16:51 | 显示全部楼层
eric2013 发表于 2023-10-11 12:21
还行,有时间你也测评下试试效果。

好的, 我目前就是 guix 界面切换没有搞定啊, 就是基于某种特定条件下 就启动界面切换的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-10-11 16:44:20 | 显示全部楼层
浴火重生 发表于 2023-10-11 13:26
这个方式值得借鉴,rtos下面使用DMA方式的SPI、操作SD卡等,在文件系统也是死等判断完成标志和状态,这种是 ...

不用,DMA在RTOS下直接放在低优先级任务里面慢慢刷即可。

【深入探讨】DMA到底能不能起到加速程序执行的作用,DMA死等操作是否合理,多个DMA数据流同时刷是否处理过来
https://www.armbbs.cn/forum.php? ... 9765&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-10-11 16:45:17 | 显示全部楼层
hpdell 发表于 2023-10-11 16:16
好的, 我目前就是 guix 界面切换没有搞定啊, 就是基于某种特定条件下 就启动界面切换的

在你的那个帖子里面回复你了,这个我们有专门做过一个例子。
回复

使用道具 举报

2

主题

37

回帖

48

积分

新手上路

积分
48
发表于 2023-10-15 21:10:24 | 显示全部楼层
老师,有这个章节的图片原图吗?想下载一下慢慢看。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-10-16 07:15:44 | 显示全部楼层
weinizhongqing 发表于 2023-10-15 21:10
老师,有这个章节的图片原图吗?想下载一下慢慢看。

这个截图是从例子里面截图的,一楼末尾的百度云网盘有下载。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-12-10 15:30:21 | 显示全部楼层
这个只是任务定时器的分辨率吗?
不知道怎么实现抢占,没有强制就绪函数。
用了个笨办法实现抢占,将需要在中断后立即执行的线程设为最高优先,在中断里将线程的睡眠定时器剩余的ticks清零。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-12-10 16:01:20 | 显示全部楼层
试试回帖
不知道如何在中断里将指定的线程就绪。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2023-12-11 07:32:12 | 显示全部楼层
nos001 发表于 2023-12-10 15:30
这个只是任务定时器的分辨率吗?
不知道怎么实现抢占,没有强制就绪函数。
用了个笨办法实现抢占,将需要 ...

没太理解你的意思。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-12-11 19:11:05 | 显示全部楼层
eric2013 发表于 2023-12-11 07:32
没太理解你的意思。

水平太低,刚刚试用ThreadX,各种概念模糊不清,线程只会照着例程简单使用sleep,见笑了。
上帖的想法是,串口接收空闲中断发生后,立即使指定的线程进入执行状态;由于源码没读懂,不知道使用什么方法,于是采用了笨办法,将线程睡眠定时器的剩余ticks清零,达到最快切换到指定线程的目的。
现在读了下threadx指南,原来使用消息队列就可以了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 08:54 , Processed in 0.342375 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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