UCOS中如何调用类中的方法微秒

查看: 707|回复: 10
请问ucosiii能否在微秒延时里进行任务调度
主题帖子精华
新手上路, 积分 26, 距离下一级还需 24 积分
在线时间5 小时
我看了课程中ucosiii只能在最小1ms的延时才能有任务调度,例程把us的延时任务调度关了。如果把里面把us延时任务调度开了,但OS_CFG_TICK_RATE_HZ最多只能1000,是不是也不能有us延时的任务调度?
我的项目需要在20us的延时中做任务调度,ucosiii能解决吗?如果不能的话还有其他的方法吗?
us延时的时候,如果你任务调度开了,那肯定会影响的。
主题帖子精华
金钱128035
在线时间1124 小时
那请问是不是把us延时的任务调度开了,OS_CFG_TICK_RATE_HZ这个值是多小也不影响us的延时调度
us延时的时候,如果你任务调度开了,那肯定会影响的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
金钱128035
在线时间1124 小时
20us,那就是50K的切换频率,理论上应该还是可以达到,但是你的CPU可能百分之90的时间,都在切换任务,而不是在执行任务了。。。
主题帖子精华
金牌会员, 积分 2363, 距离下一级还需 637 积分
在线时间313 小时
主题帖子精华
高级会员, 积分 694, 距离下一级还需 306 积分
在线时间126 小时
可以的,只不过会降低效率
主题帖子精华
新手上路, 积分 26, 距离下一级还需 24 积分
在线时间5 小时
那请问是不是把us延时的任务调度开了,OS_CFG_TICK_RATE_HZ这个值是多小也不影响us的延时调度
主题帖子精华
高级会员, 积分 507, 距离下一级还需 493 积分
在线时间66 小时
请问什么项目会用到us级任务调度啊?时间要求这么严格?
时间要求严格的任务用中断完成不行吗?
主题帖子精华
新手上路, 积分 26, 距离下一级还需 24 积分
在线时间5 小时
我想用sd卡的数据控制64个led灯,但是是我希望64个灯能在1秒内有3000次刷新,刷新率越高越好,我就需要一边从sd卡取数据,一边把操作led灯,如果中断了sd卡就取不到数据。好像stm32不太行,我现在想能不能用多个芯片,一个用来取sd卡的数据,其他的用来控制led灯,但时间同步上没想通,或者想用其他运行能力更强的芯片
主题帖子精华
高级会员, 积分 507, 距离下一级还需 493 积分
在线时间66 小时
貌似跟点阵显示屏要求差不多。 是不是参考一下点阵显示屏的硬件设计?
主题帖子精华
新手上路, 积分 26, 距离下一级还需 24 积分
在线时间5 小时
就是类似的东西,其实我想用ws2812的灯珠led灯做,但是如果只用一个i/o口做的话,ws2812点亮一个灯就要30us,想找什么芯片可以并行输出数据,一下控制好几组ws2812的灯珠
主题帖子精华
高级会员, 积分 507, 距离下一级还需 493 积分
在线时间66 小时
串入并出芯片,例如传统的74HC595
Powered byUcos系统学习之时钟节拍_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Ucos系统学习之时钟节拍
将教育做到极致的高端在线教育网站|
总评分0.0|
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢UCOS III 微秒级别延时问题
[问题点数:50分]
UCOS III 微秒级别延时问题
[问题点数:50分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
2013年10月 硬件/嵌入开发大版内专家分月排行榜第三2013年6月 硬件/嵌入开发大版内专家分月排行榜第三2013年3月 硬件/嵌入开发大版内专家分月排行榜第三
匿名用户不能发表回复!|ucos精确延时
技术探讨:关于带UCOS的嵌入式系统如STM32微妙级延时和处理方法
QQ群中不少学友提出,使用了UCOS,不知道如何实现微秒级别的延时(如100微秒处理一次)
困惑主要原因在于:还是想用OSTimeDly,认为应该使用OS的系统服务来做
我这里说说我对这个问题的理解:
OSTIMETICK是操作系统的时钟滴答服务,如果度过我写的那本《嵌入式实时操作系统μCOS原理与实践》,看过对源码的分析,应该知道,滴答服务做是将延时的任务延时时间--,减到0就恢复任务就绪状态,然后如果当前运.行的任务不再是优先级最高的,进行一次任务调度OSSCHED.其实功能是有限的。而一般在32下使用SYSTICK中断触发滴答服务,这个时间应该是1MS到100MS为宜。而且,延时时间是有量化误差的,OSTIMEDLY(1)是极其不准确的。因此,首先应否决使用延时在做这个事情。
那么,就应该用定时器,设置定时器的中断发生周期是微秒级别的。当定时器中断的时候,就进行处理。但是,处理的代码较长,在中断服务程序ISR中去写是不好的,系统的实时性变差。那又如何是好!
其实,信号量管理这些事件管理,这时就要显示能力了。做法应该是:
1。创建一个信号量,其值为0
2.处理任务PEND信号量,被阻塞
3.定时器中断服务程序POST信号量,处理任务就绪,离开中断后处理任务接管CPU进行处理。现在是在用户模式下进行数据处理,不影响系统中断响应,这样就解决了问题。
以下是QQ群部分聊天记录:
OBIN(:00:38
老师您好!我是刚加入这个群的。
我是刚开始弄UCOS,我想用在伺服控制方面。用UCOS可以把控制周期控制在0.1ms以内吗
975) 0:01:23
我也想知道
成都-亮点-UCOS(:01:25
975) 0:01:45
cpu时钟配置成多少好呢
成都-亮点-UCOS(:02:17
但是我想你的设计应该是用一个定时器产生
成都-亮点-UCOS(:02:24
0.1MS的中断
成都-亮点-UCOS(:02:34
而不是用SYSTICK
成都-亮点-UCOS(:02:42
SYSTICK是用来做系统服务
成都-亮点-UCOS(:02:55
定时器的ISR中PEND信号量给任务就可以了
成都-亮点-UCOS(:03:23
系统滴答服务不要小于1MS
成都-亮点-UCOS(:03:39
不会用的人只会延时,那是不行的
975) 0:03:44
我开的1000
成都-亮点-UCOS(:03:46
没有了解UCOS的真谛
975) 0:04:00
ROBIN(:04:22
那如何保证系统滴答1ms呢?我的控制周期必须控制在0.1ms以内
975) 0:04:50
成都-亮点-UCOS(:04:53
你的定时器设置0.1ms以内中断一次
成都-亮点-UCOS(:05:03
STM32一堆定时器
975) 0:05:03
系统滴答的优先级在那设置呢
975) 0:05:19
他的优先级是不是最高的》
成都-亮点-UCOS(:05:20
SYSTICK在NVIC中
975) 0:05:21
成都-亮点-UCOS(:05:24
很好设置的
ROBIN(:05:32
成都-亮点-UCOS(:05:34
可以调整优先级
975) 0:05:42
我用的3.5的库
975) 0:05:59
初始化默认是最高吗
成都-亮点-UCOS(:06:04
库里没有的话你都可以写寄存器
成都-亮点-UCOS(:06:08
这些不是问题
975) 0:06:13
成都-亮点-UCOS(:06:18
库是方便你的工具
成都-亮点-UCOS(:06:37
SYSTICK默认很高的
成都-亮点-UCOS(:06:45
你可以修改的
975) 0:06:52
975) 0:07:34
很多时候还是对stm32的配置不是很清楚
ROBIN(:07:41
就是说把定时器优先级设高,每格0.1ms进入中断。systick保证任务切换1ms
成都-亮点-UCOS(:08:05
SYSTICK不一定做任务切换
成都-亮点-UCOS(:08:10
这个是个误区
成都-亮点-UCOS(:08:36
你们以为滴答服务做切换,我书里对嘀嗒服务程序的代码讲的很清楚
成都-亮点-UCOS(:08:46
是用来判断谁延时时间到了的
975) 0:08:53
成都-亮点-UCOS(:09:23
你的定时器中断0.1MS来一次,POST信号量给任务,就能切换了
成都-亮点-UCOS(:09:29
不需要等滴答服务
成都-亮点-UCOS(:09:42
这个切换时间是微秒级的
成都-亮点-UCOS(:09:49
否则算什么RTOS
ROBIN(:10:02
成都-亮点-UCOS(:10:56
不用UCOS,你要么加长ISR,要么在ISR中置为全局变量,然后在主程序中查询
成都-亮点-UCOS(:11:07
这样都做不到微妙级
975) 0:11:23
这么说要精确控制只能中断了??
成都-亮点-UCOS(:11:32
975) 0:11:38
975) 0:11:53
975) 0:12:24
那样的话精确控制时间很难
975) 0:12:44
中断必须要短
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!uCOS III 和 uCOS II的区别
邵贝贝:嵌入式操作系统μC/OS-III
作者:邵贝贝 来源:嵌入式系统联谊会
邵老师长期从事单片机和嵌入式系统教学和应用工作,并负责清华大学飞思卡尔实验室工作。邵老师与大家分享了μC/OS的发展经历,即将发布的μC/OS-III的细节,以及他对未来嵌入式操作系统的认识。
以下是文字实录。
大家好,我讲讲μC/OS-III,原来是μC/OS-II,现在到了μC/OS-III。今年第一期《电子产品世界》里有一篇调查,有627份中国嵌入式系统工程师的调查问卷,显示出现在用的最多的38%使用Linux,排在第二个就是μC/OS-II占到34%,其中μC/OS-II还是专门为嵌入式设计的实时操作系统,说明μC/OS-II从前几年进到中国以来,是有影响力的操作系统,据我了解,在美国好像还没有这么多的影响。影响力比较大的是中国和印度这样大的发展中国家,也包括日本和韩国。我们可以看到几乎能想到的CPU,在网上都可以下载到、移植的范例,这还不是全部,很多像Altera软核里面都有μC/OS的移植。
最早μC/OS是一本书,是93年出的,95年我到意大利国际物理中心准备做instructor,开一个叫做《嵌入式实时系统在物理学应用》的一个讲习班,讲习班大部分是印度人、中国人等,讲课老师大部分从欧洲核研究中心和美国大学来的,其中就拿了这个东西作为教材。它最早是为摩托罗拉68HC11增强型单片机写的,管理四个任务,用查表的办法来确定优先级。90%以上的代码是自己写的,和硬件无关,相关的代码不到200行,书上提供了一个可以在PC上跑的一个8088范例,可裁剪可固化,其实μC/OS这本书是个很好的教材,只有261页,其中有100页是源代码,解释了150页。后来这本书,96年以后,在我们实验室,给研究生用的较多,一直没找到哪个出版社愿意买它的版权。
到了2000年的时候,再想回到μC/OS的时候,已经不太可能,μC/OS-II出来了,后来第二年,电力出版社买了版权,我们就翻译了一下,到了第三本书,μC/OS-II这本书,这个就有了差不多600页,而且把源码附在光盘上,就被美国航空航天管理局认可的可以上直升飞机的一个操作系统,是一个很好用的操作系统,对于学校教学来说,这个功能很强,又很复杂。在教学上不如老版本了。这是第三本书的中译文,2003年出的。我们看它的发展,在μC/OS一开始,书上有个μC/OS的故事,讲到他写的这个东西,当时发表文章都没人理他,后来放到网上,下载的人很多,慢慢得到认可,所以最早1.08的版本,是放在网上,是不要版权的。到了1.10版本以后,被认可了,如果想要拿去牟利的话,就要给他一些回报。但作为教学研究,不谋利的时候,还是可以使用的。μC/OS也好,μC/OS-II也好,它是基于优先级的,用查表的算法去管理64个任务,只能取0~63这64个优先级。今年3月,已经有μC/OS-III发布可以使用了。
那么从μC/OS-II到μC/OS-III有哪些不同的地方呢?增加了什么,我们看改动还是很大的。一个是原来只有0~63个优先级,而且优先级不能重复,现在允许几个任务使用同一个优先级,在同一个优先级里面,支持时间片调度法;第二个是允许用户在程序运行中动态配置实时操作系统内核资源,比如,任务、任务栈、信号量、事件标志组、消息队列、消息数、互斥型信号量、存储块划分和定时器,可以在程序运行中变更。这样,用户可以避免在程序编译过程中出现资源不够分配的问题。在资源复用上,也做了一些改进。μC/OS-II中,最多任务数有64个,到了版本2.82以后是256个,μC/OS-III中,用户可以由任意多的任务、任意多的信号量、互斥型信号量、事件标志、消息列表、定时器和任意分配的存储块容量,仅受限于用户CPU可以使用的RAM量。这个也是一个很大的扩展。(问:邵老师,它的这个数是启动时就固定的,还是启动后随便定?)它是配置的时候可以自由定义的,只有你的RAM足够大的话。第四点是增加了很多功能,功能总是越来越多的,大伙可以看一下的。原来这些功能在μC/OS-II里面是没有的。
下面一点:除每个任务的最长关中断时间,内在性能测试允许用户测得系统的最长关中断时间。就是它提供了一些工具可以测量每个任务关中断的时间;用户在测得每个任务的最长禁止调度时间基础上,可以测得系统禁止任务调度的最长时间,也是说做了个测量;每次发出的信息都带有时间戳,用户也容易得到任务级的响应时间;性能测试还包括任务切换次数计数器和每个任务的CPU使用率等,这个在调试的时候,还是蛮有用的。第六,μC/OS-III设计成能方便地按照CPU架构优化,特别是其数据类型可按照CPU能适应的最佳位数宽度修改(8-16-32);选择和确定优先级的算法可以用汇编语言写,以发挥一些有特殊指令的CPU的优势,有很多CPU有置位和复位指令,计数器计到零,还有就是找出第一个不为零位指令等。第七条,有很多数需要自行处理的内部据结构和变量,是通过给调度器上锁的方式保护这些临界段代码的,不使用关中断的方式,内核关中断的时钟周期几乎为零,这就保证了μC/OS-III能够响应哪些最快的中断等。第八,μC/OS-III还支持内核觉察式调试,用户友好地使内置内核觉察调试器检查、显示μC/OS-III的变量、数据结构、支持μC/Probe工具在程序运行过程中动态显示修改各种变量。从这些改动上来看,μC/OS-III还是比以前做了很大的优化的,和以前的产品有很多的区别。
我觉得从小内核μC/OS-II到μC/OS-III,已经有17年过去了,很多性能在往大的比较出名的操作系统,像VxWorks、Wind River上靠拢,何小庆告诉我Wind River最近被Intel收购了,看了Wind River的基本情况,应该说VxWorks是公认的最好的嵌入式RTOS,是一个完整的自成体系的软件包,但是在过去很多年,它曾经是一个靠BSP支持的黑盒子,用户可以不关心这些源码,它是这样一种思路。近年来也在公开源码。
看到消息说,Wind River打算进一步转向Linux用于ARM和PowerPC,Intel为支持多核设计,打算发展软件,如嵌入式应用、Linux。多核应用是为了INTEL的重点。面前μC/OS-II的商业模式还是主要靠出书,让学生学习使用,现在它的团队有10人左右,比较小。我们知道如果一个软件没人维护,也是没有生命力的,它仅仅维护一个内核,在第三方有很多单位和它合作,做很多其他的事情,像人机界面、文件系统、TCP/IP等等,从网站上我们看到,大部分都是第三方合作开发的,我看第三方的报价也都不便宜,都在6000美元以上,当然有很多自由软件也在和它在结合。用户根据自己需要可以去组合。商业模式这些事情,其实我并不是很懂,我教书就想用老的,教书挺好的,所以商业模式这一块我也是瞎说,呵呵。
思考和体会,经过17年,从1个小内核发展成为1个可以和大的商业RTOS媲美的专门用于嵌入式系统的成熟的RTOS体系,一个特点就是开放源代码,让很多工程师,从学习,到认识,到使用。作为一个软件,一个内核,就需要维护,需要团队,它的团队现在很小,大概有10人;需要第三方的支持,靠这样的形式来组织起来的;也需要和它发展相适应的商业模式;也会是对VxWorks等大公司产品的一种冲击。我就总结了这么几条。关于μC/OS的实时性问题,其实有一个函数就是delay这个函数,如果有64个任务的话,就有64个需要delay的计数器,每次时间中断的时候,都要来查这张表,一个一个地把它去delay,任务多的时候,时间就长,任务少的时候,时间就少,这是μC/OS唯一达不到硬实时的地方,。在这个地方上,还不能说实时性还是硬实时,除非你把时间定义为这个表上的时间,解决办法呢?这是我们最近做的一些工作,就是用双核16位的freescale的HC12S这样一个单片机,它有一个协处理器是专门来响应中断的,把定时这个功能放到协处理器来做,一个是定时器timer可以很短,从10毫秒可以到微秒级,可以到50微秒,我们做了一个测试,就是把时钟节拍放到33微秒或者62微秒这样来处理的话,如果不加协处理器的话,时钟节拍就占到53%,那就没法用了。如果用协处理器做这些事,协处理器处理这些事大概在75微秒,这样就把硬实时用双内核就实现了,所以双内核对这个还是很有好处的。
我就介绍到这,最后是Jean Labrosse他们两口子4月7号到中国玩,到我们实验室看看,照片是Labrosse和他夫人,其他是我们实验室青年教师和学生。我就说到这,谢谢!
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 c 中如何调用函数 的文章

 

随机推荐