搜索
bottom↓
回复: 14

【具体问题】【求助】时间触发的调度器,任务该怎么分配

[复制链接]

出0入0汤圆

发表于 2013-7-8 17:03:56 | 显示全部楼层 |阅读模式
本帖最后由 meirenai 于 2013-7-8 17:05 编辑

    现在在做一个小东西,用的是STC15F系列的单片机,这个片子有两个串口,但是需要使用4个串口设备,没办法只能复用串口了。
    在设计任务的初期我使用了时间触发的调度器来搭建程序框架,调度周期选择10ms,但是现在出现了一些问题,有两个任务搞得我比较心烦
    硬件设计中我把上位机通讯的串口和SIM900发送短信的串口用的是同一组串口,也就是这两个任务必须分时复用串口,单片机在与上位机通讯的任务中担任从机的任务,所有的通讯建立必须由上位机发起,下位机接收到数据后,根据命令返回响应的数据,也就是说这个上位机通讯任务必须时刻监视着串口以便接收到上位机发送的数据,接收和发送总的数据量最大有200字节。另一个SIM900任务主要的工作就是当某个标志位置位以后发送带有数据的短信,短信数据大约有70-100个字节的样子,这样就出现了问题,两个任务发送数据都超过了10ms的调度周期,这样就会出现程序的堵塞,导致按键液晶等响应变慢甚至丢失。还有一种情况是当SIM900访问串口时,上位机正好发来了命令,由于SIM900正在访问串口所以不能检测到这个命令,这个命令也就丢失了。
    还有一个问题是SIM900发送短信过程中需要较长的时间才能返回CMGS  ok 命令,这个过程中只能等待命令返回正确才能将串口切换到上位机通讯任务上,加剧了上位机发送信息丢失的问题。问题基本就是这样,思维有点乱,希望各位能给我一些建议,浪费大家的时间还请多多包含。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-7-8 17:43:41 | 显示全部楼层
STC15F是1T周期,把时间设置为1ms应该可以的吧

出0入0汤圆

 楼主| 发表于 2013-7-8 17:56:28 | 显示全部楼层
李鸿鸿 发表于 2013-7-8 17:43
STC15F是1T周期,把时间设置为1ms应该可以的吧

什么意思可以具体讲讲吗?时间设置的短了,问题不是更加严重了吗?

出0入0汤圆

发表于 2013-7-8 20:13:00 | 显示全部楼层
meirenai 发表于 2013-7-8 17:56
什么意思可以具体讲讲吗?时间设置的短了,问题不是更加严重了吗?

我的意思是说任务调度器时钟节拍可以不用那么长,以“最坏”的情况计算

出0入0汤圆

发表于 2013-7-9 15:38:55 | 显示全部楼层
不知楼主单片机的资源是否足够,用定时器模拟两个全双工串口也不难的,何必要分时复用呢

出0入0汤圆

 楼主| 发表于 2013-7-9 18:13:15 | 显示全部楼层
lcw_swust 发表于 2013-7-9 15:38
不知楼主单片机的资源是否足够,用定时器模拟两个全双工串口也不难的,何必要分时复用呢 ...

主要是系统任务太多,用定时器模拟串口的话接收数据会很占CPU啊!

出0入0汤圆

发表于 2013-12-29 18:28:07 | 显示全部楼层
meirenai 发表于 2013-7-9 18:13
主要是系统任务太多,用定时器模拟串口的话接收数据会很占CPU啊!

任务执行一次不一定要发送一串数据,可以是每次一个字节,我最近用时间触发的方式做了个stm32cm0程序,里面有一个按键扫描+100K bpsRS85通讯+DS18B20+LCD1286,目前因为硬件没到位,按键扫描和LCD12864没调试,通讯和传感器都调通了。

出0入0汤圆

发表于 2013-12-29 18:39:51 来自手机 | 显示全部楼层
改20ms试试,另一个一个字节发出试试,另加大波特率试试

出0入0汤圆

 楼主| 发表于 2013-12-29 19:36:47 | 显示全部楼层
coleyao 发表于 2013-12-29 18:28
任务执行一次不一定要发送一串数据,可以是每次一个字节,我最近用时间触发的方式做了个stm32cm0程序,里 ...

嗯,问题已经解决,采用了模拟串口的方式,上位机的指令不会耽误,SIM900发短信的时候会阻塞系统3-5秒,
系统资源紧张,换用你说的思路来发送SIM900的数据应该可行,但是接收SIM900 的命令响应如果用模拟串口的话必须是要死等的。这个问题我认为无解。
现在的系统也差不多能应付的过来,不会产生很严重的阻塞,除了处理发送短信任务会阻塞外,其他的AT命令响应还是很快的。满足要求。嘿嘿。
说的比较乱,见谅

出0入0汤圆

发表于 2013-12-30 08:14:03 | 显示全部楼层
meirenai 发表于 2013-12-29 19:36
嗯,问题已经解决,采用了模拟串口的方式,上位机的指令不会耽误,SIM900发短信的时候会阻塞系统3-5秒,
...

不知道你用到的串口波特率是多少,用的哪些资源模拟串口的(外部中断+定时中断还是仅定时中断?),一般波特率不高(9600)的时候,就算是模拟的串口收发,合理分派资源的话也用不着阻塞其它任务的!

出0入0汤圆

 楼主| 发表于 2013-12-30 08:57:02 | 显示全部楼层
coleyao 发表于 2013-12-30 08:14
不知道你用到的串口波特率是多少,用的哪些资源模拟串口的(外部中断+定时中断还是仅定时中断?),一般 ...

只用的定时器当做精确延时,什么中断都没用,用外部中断+定时器中断编程太复杂了,感觉程序运行起来容易出错。

出0入0汤圆

发表于 2013-12-30 09:19:09 | 显示全部楼层
meirenai 发表于 2013-12-30 08:57
只用的定时器当做精确延时,什么中断都没用,用外部中断+定时器中断编程太复杂了,感觉程序运行起来容易 ...

用外部中断+定时器会稍好一点,有下降沿就开始接收了,只用定时中断的话最大要慢一个扫描周期,而且因为不是从固定的位置开始扫描,同样的扫描频率,接收的可靠性要稍低一些(当然做好了的话两个方法差别不大,只是要挖掘最大波特率潜力的时候会有明显差异),我以前写过无线编解码的程序就是两个中断配合做的,外部中断只判断是否有收到数据,剩下的都是定时中断处理。

出0入0汤圆

 楼主| 发表于 2013-12-30 10:21:03 | 显示全部楼层
coleyao 发表于 2013-12-30 09:19
用外部中断+定时器会稍好一点,有下降沿就开始接收了,只用定时中断的话最大要慢一个扫描周期,而且因为 ...

恩,这样的确能解决问题,我考虑一下,多谢了。

出0入0汤圆

发表于 2013-12-30 11:06:15 | 显示全部楼层
可以看看《时间触发嵌入式系统》里怎么写的,好像有一章节能解决你这个问题,14,15,16章

出265入0汤圆

发表于 2015-4-4 21:33:19 | 显示全部楼层
皮爱了西 发表于 2013-12-30 11:06
可以看看《时间触发嵌入式系统》里怎么写的,好像有一章节能解决你这个问题,14,15,16章 ...

是设置缓冲区来的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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