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

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 命令,这个过程中只能等待命令返回正确才能将串口切换到上位机通讯任务上,加剧了上位机发送信息丢失的问题。问题基本就是这样,思维有点乱,希望各位能给我一些建议,浪费大家的时间还请多多包含。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
meirenai
2020-01-22 00:31
coleyao 发表于 2013-12-29 18:28
任务执行一次不一定要发送一串数据,可以是每次一个字节,我最近用时间触发的方式做了个stm32cm0程序,里 ...

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

一周热门 更多>