我是靠谱客的博主 健康早晨,最近开发中收集的这篇文章主要介绍FreeRTOS学习记录(二):裸机系统、多任务系统裸机系统多任务系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2022-04-22

依据:[野火]《FreeRTOS内核实现与应用开发实战指南》


目录

裸机系统

轮询系统

前后台系统

多任务系统


裸机系统

轮询系统和前后台系统

轮询系统

int main(void)
{
    HardWareInit();//初始化
    
    while(1)
    {
        DoSomething1();
        DoSomething2();
        DoSomething3();
    }   

}

前后台系统

轮询系统+中断。中断称为前台

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;


int main(void)
{
    HardWareInit();//初始化
    
    while(1)
    {
        if(flag1) DoSomething1();
        if(flag2) DoSomething2();
        if(flag3) DoSomething3();
    }   

}

void ISR1(void)
{
    /* 置位标志位 */
    flag1 = 1;
    /* 如果事件处理时间很短,则在中断里面处理
    如果事件处理时间比较长,在回到前台处理 */
    DoSomething1();
}

void ISR2(void)
{
    /* 置位标志位 */
    flag2 = 1;
    /* 如果事件处理时间很短,则在中断里面处理
    如果事件处理时间比较长,在回到前台处理 */
    DoSomething2();
}

void ISR3(void)
{
    /* 置位标志位 */
    flag3 = 1;
    /* 如果事件处理时间很短,则在中断里面处理
    如果事件处理时间比较长,在回到前台处理 */
    DoSomething3();
}

多任务系统

伪代码:::

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;


int main(void)
{
    HardWareInit();//初始化
    
    RTOSInit();//OS初始化

    RTOSStart();//OS启动,开启多任务回调,不再返回

}

void ISR1(void)
{
    /* 置位标志位 */
    flag1 = 1;

}


void DoSomething1(void)
{
    /* 无限循环,不能返回 */
    while(1)
    {
        /* 任务实体 */
        if (flag1) 
        {

        }
    }
}

//多几个ISR和DoSomething

程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为任务。每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。

模型事件响应事件处理特点
轮询系统主程序主程序轮询响应事件,轮询处理事件
前后台系统中断主程序实时响应事件,轮询处理事件
多任务系统中断任务实时响应事件,实时处理事件

这么看来、其实调用STM32给的API很简单,不需要知道太多内核东西!!!


API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节


最后

以上就是健康早晨为你收集整理的FreeRTOS学习记录(二):裸机系统、多任务系统裸机系统多任务系统的全部内容,希望文章能够帮你解决FreeRTOS学习记录(二):裸机系统、多任务系统裸机系统多任务系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部