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

2020-01-20 19:07发布

本帖最后由 meirenai 于 2013-7-8 17:05 编辑

    现在在做一个小东西,用的是STC15F系列的单片机,这个片子有两个串口,但是需要使用4个串口设备,没办法只能复用串口了。
    在设计任务的初期我使用了时间触发的调度器来搭建程序框架,调度周期选择10ms,但是现在出现了一些问题,有两个任务搞得我比较心烦
    硬件设计中我把上位机通讯的串口和SIM900发送短信的串口用的是同一组串口,也就是这两个任务必须分时复用串口,单片机在与上位机通讯的任务中担任从机的任务,所有的通讯建立必须由上位机发起,下位机接收到数据后,根据命令返回响应的数据,也就是说这个上位机通讯任务必须时刻监视着串口以便接收到上位机发送的数据,接收和发送总的数据量最大有200字节。另一个SIM900任务主要的工作就是当某个标志位置位以后发送带有数据的短信,短信数据大约有70-100个字节的样子,这样就出现了问题,两个任务发送数据都超过了10ms的调度周期,这样就会出现程序的堵塞,导致按键液晶等响应变慢甚至丢失。还有一种情况是当SIM900访问串口时,上位机正好发来了命令,由于SIM900正在访问串口所以不能检测到这个命令,这个命令也就丢失了。
    还有一个问题是SIM900发送短信过程中需要较长的时间才能返回CMGS  ok 命令,这个过程中只能等待命令返回正确才能将串口切换到上位机通讯任务上,加剧了上位机发送信息丢失的问题。问题基本就是这样,思维有点乱,希望各位能给我一些建议,浪费大家的时间还请多多包含。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
李鸿鸿
1楼-- · 2020-01-21 00:01
STC15F是1T周期,把时间设置为1ms应该可以的吧
meirenai
2楼-- · 2020-01-21 00:10
李鸿鸿 发表于 2013-7-8 17:43
STC15F是1T周期,把时间设置为1ms应该可以的吧

什么意思可以具体讲讲吗?时间设置的短了,问题不是更加严重了吗?
李鸿鸿
3楼-- · 2020-01-21 04:44
meirenai 发表于 2013-7-8 17:56
什么意思可以具体讲讲吗?时间设置的短了,问题不是更加严重了吗?

我的意思是说任务调度器时钟节拍可以不用那么长,以“最坏”的情况计算
lcw_swust
4楼-- · 2020-01-21 08:40
不知楼主单片机的资源是否足够,用定时器模拟两个全双工串口也不难的,何必要分时复用呢
meirenai
5楼-- · 2020-01-21 13:47
 精彩回答 2  元偷偷看……
coleyao
6楼-- · 2020-01-21 18:53
meirenai 发表于 2013-7-9 18:13
主要是系统任务太多,用定时器模拟串口的话接收数据会很占CPU啊!

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

一周热门 更多>