Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
关于多任务调度中的执行问题
发布于 2013-02-20 16:56:16 浏览:3096
订阅该版
经过几天的调试RTT终于跑起来了,不过也碰到了些问题,所以上来继续求教了,呵呵 假设我有三个任务想要执行,并且通过几个soft timer来定时,让每个任务在while(1)中判断标志位来做精确的定周期时间的调用 task1,优先级2,时间片10(对应于1ms),timer触发的调用也是500ms一次 task2,优先级5,时间片10(对应于1ms),timer触发的调用周期是1ms一次 现在的问题是,如果两个task内如果不放rt_thread_delay函数主动放弃执行权的话,系统总会呗高等级的task1霸占着资源,其他低等级任务总得不到执行。但放了rt_thread_delay的话,是不是意味着每个每个任务中程序能占用资源的时间只能为(soft timer时间 减去 rt_thread_delay的时间)? 又或者说我这中调度方法本身就有问题,还有其他更好的方法来精确实现多优先级和多种不同周期的任务执行呢? 在每个任务末了直接调用rt_thread_suspend,然后再timer的timer out里面调用各自的rt_thread_resume是不是更好的方案呢? ![tshell overflow.jpg](https://oss-club.rt-thread.org/uploads/3290_df276ed13a1a8a5085c904ddba80db25.jpg)
查看更多
8
个回答
默认排序
按发布时间排序
bernard
2013-02-20
这家伙很懒,什么也没写!
[https://github.com/RT-Thread/manual-doc/blob/master/zh/1chapters/02-chapter_thread.md](https://github.com/RT-Thread/manual-doc ... _thread.md) 这份文档的最后部分提及了如何有效的编写一个任务,因为这个是从原来文档中导出的,所以排版完全乱掉了,先看着,后面几天我会重新写下格式
knight_hu
2013-02-20
这家伙很懒,什么也没写!
非常感谢,马上学习一下
knight_hu
2013-02-20
这家伙很懒,什么也没写!
非常感谢熊先生,大部分内容和之前的一本手册差不多 ,不过我也有了点思路 因为我的应用时工控上得,任务一般都是定时,运行一遍,然后等待下一次定时触发运行就行了,任务之间没有互锁关系,仅通过全局变量即可满足所需的关联要求。 如果是这样的话,是否在线程内部运行完毕之后自己调用thread_suspend就能将自身置于阻塞态呢?如果是的话就好办了,thread_resume启动全部放到不同定时周期的timeout来触发,不知道我这种想法可行么? 因为板子在公司现在不能测试,明天去公司试试看这个方法的可行性,呵呵
rogerz
2013-02-20
这家伙很懒,什么也没写!
>非常感谢熊先生,大部分内容和之前的一本手册差不多 ,不过我也有了点思路 >因为我的应用时工控上得,任务一般都是定时,运行一遍,然后等待下一次定时触发运行就行了,任务之间没有互锁关系,仅通过全局变量即可满足所需的关联要求。 >如果是这样的话,是否在线程内部运行完毕之后自己调用thread_suspend就能将自身置于阻塞态呢?如果是的话就好办了,thread_resume启动全部放到不同定时周期的timeout来触发,不知道我这种想法可行么? >因为板子在公司现在不能测试,明天去公司试试看这个方法的可行性,呵呵 --- 这个方式有局限性,虽然你说任务不互锁,难道没有其他可能挂起的情况了?比如等待io什么的? 我不太建议在应用层直接控制线程状态,RTT提供了很多ipc的方式,针对定时任务,可以考虑用event。
knight_hu
2013-02-21
这家伙很懒,什么也没写!
>>非常感谢熊先生,大部分内容和之前的一本手册差不多 ,不过我也有了点思路 >>因为我的应用时工控上得,任务一般都是定时,运行一遍,然后等待下一次定时触发运行就行了,任务之间没有互锁关系,仅通过全局变量即可满足所需的关联要求。 >>如果是这样的话,是否在线程内部运行完毕之后自己调用thread_suspend就能将自身置于阻塞态呢?如果是的话就好办了,thread_resume启动全部放到不同定时周期的timeout来触发,不知道我这种想法可行么? >>因为板子在公司现在不能测试,明天去公司试试看这个方法的可行性,呵呵 > >--- > > > >这个方式有局限性,虽然你说任务不互锁,难道没有其他可能挂起的情况了?比如等待io什么的? > >我不太建议在应用层直接控制线程状态,RTT提供了很多ipc的方式,针对定时任务,可以考虑用event。 --- 非常感谢您的建议,这两天我试试看这几种方法
bernard
2013-02-21
这家伙很懒,什么也没写!
thread_suspend/thread_resume,除非你非常精通RT-Thread的内部行为,否则不建议你使用。 作为一个RTOS,不应该是这样用法的
knight_hu
2013-02-21
这家伙很懒,什么也没写!
谢谢熊先生,上午我采用rogerz的建议,使用event时间方式,实现了精确周期调用了,现在跑1ms和100ms任务都很正常,争取今年能把AT91SAM9x35的驱动完善的差不多上传到服务器上来,为RTT做一点微薄的贡献。 另:调试中还发现一个有趣的现象,就是当我通过PC连续快速调用finsh指令查看任务时候,有一定几率会出现tshell stack overflow,此时看到tshell的sp似乎跑飞了,stack size也变小。如果调用一次后间隔5-6s再调用,也不会出这个问题。如果在pc端不使用finsh去查看任务,也不会出这个故障。虽然tshell是动态线程,但也不至于连stack大小也变化了,这比较奇怪,还没想通为什么。 系统里面负担是这样的,两个tLED任务一个是1ms触发,一个是100ms触发,时间片1ms,两个任务都在300us内完成。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
knight_hu
这家伙很懒,什么也没写!
提问
35
回答
63
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
TinyUSB Demo运行教程
2
RT-Thread学习大礼包一键带走!
3
freemodbus从机调试说明
4
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
5
基于 RT-Thread 星火一号开发板的俄罗斯方块
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
用户名由3_15位
10
个答案
1
次被采纳
KunYi
4
个答案
1
次被采纳
踩姑娘的小蘑菇
2
个答案
1
次被采纳
bernard
1
个答案
1
次被采纳
rv666
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部