打印
[信息]

转载】常见的几种单片机编程框架!

[复制链接]
2185|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
什么是框架?

程序框架其实就类似一个文件大纲或者模板。因为写程序就和类似于写文章,如果没有大纲或者模板那么你写起来就会比较费劲。而。

为什么要有框架?
节约时间,减少错误。因为对于一种类型的程序它们代码结构体逻辑是一样的,同时有大量相似或者共同的地方。我们可以将这些共同的地方抽出来形成一个固定的程序框架,那么我们再开发新的同一种类型的程序时就可以套用这套框架。

这样会大大提高我们的开发效率,同时由于这个框架是一套公众的大家都在使用的与维护的,使用它会使代码逻辑更不容易出错。

嵌入式系统组成
嵌入式控制系统基本都是由“普通任务”和“中断任务”组成。

• 普通任务:指对时间响应要求不高或者说是那种周期性执行的任务;

• 中断任务:指对时间响应要求高,必须立刻处理的任务;

常见的框架1、轮询无中断
说明:所有的任务都是按照顺序执行,为了减少整个系统的响应时间有两种方法:

1. 任务中不要使用等待式的延时函数;

2. 任务无法一次执行完的情况下应该将任务分解成若干个小任务每次执行一个小任务循环直到任务完成;上述两种方法都会消耗内存,本来局部变量可以解决的事,现在只能用静态或者全局变量来处理。

使用特权

评论回复
沙发
两只袜子|  楼主 | 2023-5-19 09:29 | 只看该作者
优点:程序执行流程简单清晰;

缺点:对于系统修改功能非常不方便,同时如果任务数量增加的话会影响整个系统的响应时间,就会显得系统卡顿;

伪代码实现:

int main(void)
{
    while(1)
    {
        doSomething_1(); //任务1
        doSomething_2(); //任务2
        doSomething_3(); //任务3
        /*其他各种任务*/
    }
    return 0;
}
2、只有中断
说明:在“只有中断“的系统中,主函数main的循环中是不做任何操作的。

优点:可以实时响应异常的任务(事件)

缺点:中断资源有限,当任务过多时会响应不及时。

伪代码实现:

int main(void)
{
    while(1)
    {
        ;
    }
}

/*中断服务函数1*/
void ISR1_IRQHandler(void)
{
    doSomething_1();
}

/*中断服务函数2*/
void ISR2_IRQHandler(void)
{
    doSomething_2();
}
3、只有中断框架的变种
说明:采用状态机的机制来执行任务。中断函数中设置状态机的状态,而main函数主循环中根据不同的状态值执行不同的任务。这个其实不属于真正只有中断的形式。

int main(void)
{
    while(1)
    {
        if(flag_1)
        {
            doSomething_1();
        }
        if(flag_2)
        {
            doSomething_2();
        }
        if(flag_3)
        {
            doSomething_3();
        }
        /*其他各种任务*/
    }
    return 0;
}

/*********中断服务函数1************/
void ISR1_IRQHandler(void)
{
    flag_1 = ~flag_1;
}

/*********中断服务函数2************/
void ISR2_IRQHandler(void)
{
    flag_2 = ~flag_2;
}

/*********中断服务函数3************/
void ISR3_IRQHandler(void)
{
    flag_3 = ~flag_3;
}

使用特权

评论回复
板凳
两只袜子|  楼主 | 2023-5-19 09:31 | 只看该作者
4、轮询有中断

说明:将一些周期性的任务放置在main函数中的主循环中执行,优点:合理的利用资源,将常规任务与紧急任务分开来了。

缺点:程序结构与逻辑比较复杂,在任务分配以及协作之间需要花费很大精力。

伪代码实现:

int main(void){    while(1)    {        if(flag_1)        {            doSomething_1();        }        if(flag_2)        {            doSomething_2();        }        if(flag_3)        {            doSomething_3();        }        /*其他各种任务*/    }    return 0;} /*********定时器中断服务函数************/void ISR1_IRQHandler(void){    }5、轮询有中断——虚拟定时器

说明:利用不同的”虚拟定时器“的定时时间来调用不同任务,当定时器的定时时间到时则执行回调函数或者调用任务函数。

这对于一些周期性运行的任务是非常适合的,同时中断可以应对外界的突发事件。这样实时性也可以得到保障,但要注意不要使用等待式延时。一般虚拟定时器的时基为1ms

优点:任务的时间间隔可以相对精确的控制,同时由于中断使用整个系统的实时性也很不错。

缺点:任务的执行时间无法掌控,当定时任务执行时间过长时会影响到虚拟定时器的定时精度。


6、非抢占式实时操作系统

说明:任务之间没有优先级之分,每个任务都是依次执行。但是任务的执行时间是由操作系统严格控制的。即使任务没有执行完,当时间片时间达到时任务便会被挂起。

优点:不用再处心积虑的减少任务中的延时,我们只需要将精力放置在业务逻辑上。

缺点:任务之间是平级的,这就会导致有些任务无法得到紧急处理。

7、抢占式实时操作系统

说明:每个任务之间是一个“死循环”同时任务都有一个优先级。高优先级的任务可以打断低优先级的任务,这个就类似于中断一样。所以整个系统的实时性就非常好,同时每个任务都还受时间片的控制也就是说它们的执行时间是可以预测的。它也支持中断可以响应紧急的事件。

优点:实时响应,工程师只需要将精力放置在业务逻辑的实现上

缺点:需要移植且对单片机硬件资源有一定要求。

常用的抢占式实时操作系统:Keil RTX、FreeRTOS、uCosII/III等等。


转载自网络,如有侵权,联系删除。





使用特权

评论回复
地板
LLGTR| | 2023-5-19 13:48 | 只看该作者
现在已经再RTOS的路上一去不复返了。

使用特权

评论回复
5
万图| | 2024-6-1 07:28 | 只看该作者

就是因为它的作用就是在电子产品设备受到雷击浪涌与ESD静电放电或者其他瞬态电压时

使用特权

评论回复
6
Uriah| | 2024-6-1 08:31 | 只看该作者

这方便一般可以使用底涂的方式来改善

使用特权

评论回复
7
帛灿灿| | 2024-6-1 10:27 | 只看该作者

正常信号一般达不到导通电压

使用特权

评论回复
8
Bblythe| | 2024-6-1 11:30 | 只看该作者

在电子电路中电容一端接电阻

使用特权

评论回复
9
周半梅| | 2024-6-1 13:26 | 只看该作者

明确出电源的性能和稳定性是否符合预期和要求

使用特权

评论回复
10
Pulitzer| | 2024-6-1 14:29 | 只看该作者

电流若是偏大就会直接导致器件烧毁

使用特权

评论回复
11
童雨竹| | 2024-6-1 16:25 | 只看该作者

确保在开关管导通,

使用特权

评论回复
12
Wordsworth| | 2024-6-1 17:28 | 只看该作者

从而达到对电子设备进行静电保护

使用特权

评论回复
13
公羊子丹| | 2024-6-1 19:24 | 只看该作者

这样就可以制作出我们想要的邮票孔了。

使用特权

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

本版积分规则

2039

主题

7368

帖子

10

粉丝