请教如何让系统实时性更强

2020-02-05 09:01发布

本帖最后由 fengtianzhifeng 于 2012-6-19 13:56 编辑

请问下大家~谁能给我说下
时间片轮转调度算法~举个很简单的例子我的小系统中有4*4的矩阵键盘,有LCD1602,还有ADC转换器。当我只测试LCD1602的时候没什么问题,测试键盘也没有什么问题~测试AD也没有问题,但是只要把这些模块集合到一起就会出问题,单片机的执行周期变的很大,浪费了很多很多时间,单片机就是属于站着等待了,而不是跑着等待,说的通俗点就是系统的实时性变的超级差~请问大家有什么解决的法子
更通俗点就是如何实现多任务
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
jswd0810
1楼-- · 2020-02-07 00:07
本帖最后由 jswd0810 于 2012-6-19 17:11 编辑

void Delay20ms(uchar delay_time)//延时函数
{
    if(!flag_timefinish)
    {
        if(delay20ms)//delay20ms为定时中断标志位
        {
            delay20ms=0;       
            if(delay_num>=delay_time)
            {
                delay_num=0;
                flag_timefinish=1;
            }
            else delay_num++;
        }       
    }
}
这是我的delay函数,供你参考,在程序中设置一些标志位,主程序查询这些标志位做出处理后清零标志位
jswd0810
2楼-- · 2020-02-07 04:43
本帖最后由 jswd0810 于 2012-6-19 17:15 编辑

中断里不要有太多的处理程序,论坛里有篇文章“从单片机初学者迈向单片机工程师”很值得学习
channe
3楼-- · 2020-02-07 10:10
 精彩回答 2  元偷偷看……
raxb
4楼-- · 2020-02-07 16:04
fengtianzhifeng 发表于 2012-6-19 14:47
额~那应该怎么实现呢?

用定时器定时1ms或者其他时间,时间到去扫描任务,这样你的程序跑一遍只需要1ms,随便增加多少复杂功能都不会影响,不过要考虑AD的转换时间和其它高速通信的影响
fengtianzhifeng
5楼-- · 2020-02-07 21:57
jpchen 发表于 2012-6-19 14:47
你这个程序的delay函数是采用for循环实现的,这样在延时函数里无法做任何事情。可以将delay函数改造成检查 ...

好滴谢谢啦~我现在再看  时间触发嵌入式系统设计模式  谢谢您的回答~
fengtianzhifeng
6楼-- · 2020-02-07 22:33
jswd0810 发表于 2012-6-19 17:09
void Delay20ms(uchar delay_time)//延时函数
{
    if(!flag_timefinish)

恩恩~好滴谢谢啦~研究研究

一周热门 更多>