打印

求解Keil内置多任务系统RTX51的一个问题!!

[复制链接]
3299|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ewby|  楼主 | 2011-6-1 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在使用这个实时多任务系统。使用过程中有几个现象我不理解。。我是用proteus做仿真的。
下面的附件是我之前给同学做的一个电梯控制系统的proteus仿真,程序也在里面。
就是我程序里面有个keyboard的Task,这个任务编写成一直都在运行的。但是,每当我在仿真中点击按键的时候,电梯开始走动,LED开始走动的时候keyboard就停止了,,不会扫描键盘了。。


求高手解答哈,非常感谢!!

DianTi.zip (100.24 KB)

相关帖子

沙发
ayb_ice| | 2011-6-1 11:41 | 只看该作者
这种细节没有人感兴趣的

使用特权

评论回复
板凳
ewby|  楼主 | 2011-6-1 12:52 | 只看该作者
2# ayb_ice

:'(
不要这么直接嘛

使用特权

评论回复
地板
ayb_ice| | 2011-6-1 13:29 | 只看该作者
2# ayb_ice

:'(
不要这么直接嘛
ewby 发表于 2011-6-1 12:52

这是实话

使用特权

评论回复
5
刘前辈| | 2011-6-1 18:41 | 只看该作者
很简单,通过配置文件把时间片关掉。稍做相应修改即可。

使用特权

评论回复
6
ewby|  楼主 | 2011-6-2 09:29 | 只看该作者
5# 刘前辈

如果把时间片关了不是就不会轮换执行任务了?
我的问题是,本来应该在正常执行的keyboard任务却在我按下按键后不执行了,要等电梯走好才继续执行。。

还有就是,为什么我的Keil里面看不到你截图里的conf_tny.A51文件呢

使用特权

评论回复
7
ayb_ice| | 2011-6-2 09:50 | 只看该作者
5# 刘前辈  

如果把时间片关了不是就不会轮换执行任务了?
我的问题是,本来应该在正常执行的keyboard任务却在我按下按键后不执行了,要等电梯走好才继续执行。。

还有就是,为什么我的Keil里面看不到你截图里的c ...
ewby 发表于 2011-6-2 09:29

应该是程序员有意这样的

使用特权

评论回复
8
ewby|  楼主 | 2011-6-2 09:55 | 只看该作者
7# ayb_ice

额。。不是的,我程序里面没有在void keyboard () _task_ 1中设定os_wait(K_SIG,0,0)之类的代码。。它不应该会停止来着……

使用特权

评论回复
9
ayb_ice| | 2011-6-2 09:59 | 只看该作者
粗略看了一下程序结构,
居然在OS结构下调用DELAY
已经没有兴趣了

使用特权

评论回复
10
ayb_ice| | 2011-6-2 10:08 | 只看该作者
粗略看了一下程序结构,
居然在OS结构下调用DELAY
已经没有兴趣了
ayb_ice 发表于 2011-6-2 09:59

另外我用KEIL仿真,扫键程序一直在运行啊,
proteus仿真可能有问题吧,另外可以硬件运行测试一下,软件仿真比较适合纯数学算法类的东西,这种和硬件关系密切的东西还是实际点好

使用特权

评论回复
11
刘前辈| | 2011-6-2 16:16 | 只看该作者
本帖最后由 刘前辈 于 2011-6-2 16:40 编辑

支持10楼。LZ几乎还是在编裸奔程序,所以建议你把时间片关掉。
1、如果打开时间片,那么就是开放了异步环境;像go这样的公共变量就成为多任务共享变量,它需要互斥保护。
2、虽然你把任务2、4写成同步方式,——这可以避免共享变量的互斥,结果这个系统按照LZ的设计执行顺序,显然是任务1-4-2,1-4-2,(只有任务3是异步并发的。)—— 如果开放了时间片异步环境,这个顺序可能是任务1-4-1-4-2(任务执行中途被切换)-1-4-2……乱序了。

如何在任务4、2运行时扫描任务1, 又保证任务不重入? 应该……


、、

使用特权

评论回复
12
ewby|  楼主 | 2011-6-3 09:18 | 只看该作者
11# 刘前辈

请问,为什么开放时间片就会有可能变成“1-4-1-4-2(任务执行中途被切换)-1-4-2……乱序了”。。。十分不解?望点拨

使用特权

评论回复
13
刘前辈| | 2011-6-3 12:29 | 只看该作者
时间片调度是异步随机发生的!这相当于一个抢占式调度器,所有任务的运行中途都可能被时间片调度剥夺CPU控制权,——时间片一旦耗尽,立即触发调度器切换到其它就绪任务。
     所以,当你的任务2运行期间,(任务2运行开销肯定大于配置默认时间片50ms。)内核调度器肯定被触发并将CPU控制权切换到任务3或者任务1(2个就绪任务),你的任务1-4-2并无条件控制,——记住这时任务2并未执行到结束,它是被时间片中途抢占的;——结果又来一个1-4-2。任务2再次重入,go 乱了吧。

       我讲清楚没有?

修改一下很容易。
      


、、

使用特权

评论回复
14
刘前辈| | 2011-6-26 17:14 | 只看该作者
修改了一下:把不重要的电路暂时删去了,程序基本不变。 LED开始走动的时候keyboard 扫描键盘仍然有效。


DianTi_A.rar (19.61 KB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

37

帖子

1

粉丝