06-七天物联网智能家居

本笔记为参加 《百问网-七天物联网智能家居》Day6 记录

1. 裸机开发常用方式

1.1 轮询方式

轮询方式,即为轮流查询是否要处理当前任务,如果要处理则所有的CPU资源都用来处理当前任务。其他任务需要等待当前任务处理完毕之后才有机会执行

按键轮询和数据处理例程

while (1)
{
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
    printf("Start data process >%d< times.\r\n", cnt);
    HAL_Delay(1000);
    printf("Data process >%d< times finished.\r\n", cnt++);
    HAL_Delay(5);
    if(KEY_STATUS() == KEY_PRESSED)
    {
        HAL_Delay(100);
        if(KEY_STATUS() == KEY_PRESSED)
        {
            printf("Key polling event process.\r\n");
            for(int i=0; i<5; i++)
            {
                LED_STATUS(LED_ON);
                HAL_Delay(300);
                
                LED_STATUS(LED_OFF);
                HAL_Delay(300);
            }
        }
    }
}
/* USER CODE END 3 */

轮询方式的缺陷1:
任务之间相互干扰非常严重,一旦某些任务耗时很长,后续任务就会等待很长时间才有机会执行

优化方法:

  1. 选择更高性能的处理器
  2. 选择主频高的CPU
  3. 增加内核(SRM32MP157:2*A7+M4)
  4. 集成硬件运行/处理模块(DMA/FPU/APU/GPU)

优化方法

轮询方式缺陷2:
无法及时响应重要任务

优化方法:

  1. 有对应的中断(事件/中断驱动)
  2. 中断服务函数

中断

1.2 事件驱动方式

事件通常和中断是一起讲的,于处理器而言,某个硬件产生的一个脉冲信号通知另一个硬件根据此信
号做处理称之为事件,例如,定时器每隔1ms触发ADC去采样,这种就叫做事件,过程中不需要CPU参
与;但是ADC采样完成之后需要CPU去处理采样的数据,所以需要告知CPU它采样完了,CPU可以去取数据做处理了,那么ADC通知CPU采样完了这个动作就叫做中断。
事件驱动

2. 中断

2.1 中断优先级

中断优先级(cortex–m3)

Cortex–M3内核有3个最高级的系统异常和支持最多256级可编程优先级的异常;
Cortex-M3内核的256个可编程优先级中最多支持128级抢占优先级;
Cortex–M3内核的抢占优先级可以实现中断嵌套;
参考 《Cortex-M3权指南》第七章
中断优先级中断嵌套

2.2 轮询与事件驱动的组合

在实际的研发过程中,对于程序设计基本不会有纯粹单一的轮询设计或者事件驱动设计,这两者往往都是相辅相成的,又因为中高端服务函数中不可处理复杂事情的原则,往往会将中断服务函数中的处理提出来放到主程序中执行,因而事件驱动方式到最后也会走到轮询方式这种设计中来。

按键中断的优先级肯定是要高于定时器的优先级的,虽然我们仍然可以使用轮询的方式去主程序中
查询按键中断是否设置其标志kyFlag来判断按键是否按下,从而来控制定时器的开或者关,但是我们按
下按键的动作其实挺慢的(至少会比1OOms要长),为了及时响应按键的需求,我们应当使用比定时器中断抢占优先级更高的外部中断抢占优先级(数值更低)。

3. RTOS的引入

在裸机开发过程中使用轮询和中断的方式可以解决大部分问题,但是在一些多任务、耗时长任务等复杂
情况下,单纯的裸机开发已经不能满足需求了

比如我们改变下 按键中断服务函数中控制定时器开关和LED的亮灭,,原本的程序仅仅是打印一句话,用不了多少时间,但是假如不同的timFlag要处理的事情耗时都很长,比如要1s的时间处理,如果用轮询的方式去做,那么整个系统就需要至少5s的时间才能处理完所有的事情

3.1 引入RT0S带来的开发难点

1.如何分配任务的优先级?
2.该如何优化我们的程序结构?
3.临界值该如何保护?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值