百问网物联网智能家居学习笔记day1

一、day1主要学习内容

在这里插入图片描述
由于之前有些基础,我这里是提高班的课程。第一天主要介绍一些程序开发方式。以及在cubemx中简单配置rtos。

二、 day1重要知识点

裸机开发模式: while(1)中轮询处理或者轮询加中断的方式。在日常的开发中,我们几乎不会出现【只使用轮询模式】或者【只使用中断模式】这样的方式,去设计我们的程序。我们往往都是将【轮询模式】和【中断模式】结合起来。
逻辑开发程序流程基本如图:
在这里插入图片描述
1、裸机开发的尴尬:
中断的处理,我们通常都会最终演变成轮询的处理。因为对于中断服务函数,我们有一个潜规则,就是:不能在中断中处理耗时长的事情,去过分干扰普通的任务。那么万一我们的某个中断,他需要cpu处理复杂的任务,比如ADC采样了1024个12bit的数据,需要cpu去做数字滤波,怎么办,放到中断里面吗?这种时候就要分情况了
1、如果后续的任务 都需要等待cpu 将这个中断需要处理的事情 处理完之后才能开展,比如刚才的数字滤波,如果后续的任务就是将数字滤波后的数据进行深入处理,那么就可以放中断里;
2.如果后续的任务,对于这个中断处理的事情,依赖不大,那么就需要我们去做精心设计,找一个平衡点,使其它任务和这个中断的处理,在占用CPU资源上进行妥协。可以看到,单片机的裸机方式开发,面临的应用场景逐渐复杂,开发难度正在逐渐提高,任务之间相互的影响变得逐渐明显 。就像我们做的实验8:在这里插入图片描述
定时器在不同时刻处理的不同的耗时长的任务,如果相互之间是没有例如数据互通、信号通信这种情况,是相互独立的,那么CPU要处理这些任务所消耗的时间资源,就是所有任务消耗时间的总长。基于裸机模式面临的这个问题,我们引入了RTOS。
RTOS的时间片轮转调度方式,可以很好的应对刚才提到的裸机模式开发的那个问题,极大程度上缩减处理时长。
2、引入rtos 及rtos开发的情况
优点: RTOS的时间片轮转调度方式,可以很好的应对刚才提到的裸机模式开发的那个问题,极大程度上缩减处理时长。
缺点: 引入RTOS后,同时也引入了其它的难点,就像往期小伙伴提到的:任务优先级的分配该怎么做呀?对于不想被任务调度打断的一些任务/数据处理这样的资源,该如何保护呀?
解决办法: 首先要说明的是:这些都没有什么公式去参考的,都是根据不同的应用场景来设计的。所以要想解决好这些问题,我们能做的就是:多写多练……

三、cubemx 尝试体验rtos

首先是CMSIS标准的版本选择,根据以下这两点,我们一般会选择V2版本,便于往后移植到高版本的内核或者低版本的内核;在这里插入图片描述
然后是配置参数,config parameters,需要我们去选择rtos使用的滴答定时器的频率、任务最小的栈空间大小,单位是words,4个字节,往后创建任务的时候,必须是这个最小栈空间大小的整数倍;RTOS使用的最大的堆空间,rtos任务、队列、互斥量等等里面的静态变量、全局变量等就是通过我们选择的内存管理方案heap1/2/3/4/5从这个堆空间中分配内存。
在这里插入图片描述
创建任务,cubemx有一个默认任务,我们无法删除,只能修改里面的参数,任务名称、优先级、栈大小、入口函数名称、代码类型、参数和内存分配方式,代码类型那里只有两种可选,默认模式就是直接在代码中定义实现入口函数,as weak则是将入口函数弱化,我们开发者可以在别的地方重新实现这个入口函数。
在这里插入图片描述
内存分配,根据RTOS的应用规则,也就两个可选:动态分配堆栈内存和静态分配堆栈,如果需要较好的内存管理方案,可能会选择静态分配.
在这里插入图片描述

创建一个自己的任务,总体和那个默认任务差不多,唯一不同的就是代码类型有一个as external,这个类型的意思是,使用cubemx生成代码后,我们的这个自己的任务入口函数是没有实现的,只是用external声明了下好让freertos创建任务的时候使用,需要我们自己在应用程序中实现,如果没有实现的话编译会报错.
在这里插入图片描述
可以在这里看到我们在config parameters里面分配的最大堆空间是否够用,如果不够我们就需要去增加最大堆空间
或者减小我们配置的rtos的内容对堆空间的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值