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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值