用过哪些嵌入式操作系统?使⽤RTOS和裸机代码开发有什么区别(优缺点)?
之前的⼀个项⽬是采⽤裸机代码开发的,写起来还⾏,通过状态机来管理业务逻辑和各种外设。
但是随着外设的增加,任务之间的同步和并⾏处理的逻辑增加,写起来就会越来越麻烦,这时就引⼊了操作系统。写代码就变得容易很多。
操作系统的作⽤,⽅便管理任务,管理延时,管理内存,管理任务间通讯。
有移植过freertos吗?
有,移植过2022lts版本, 步骤是,下载源码,裁剪源码,解决config.h的依赖缺失,解决
systemcoreclock的问题,解决xxx_Handler的回调错误, 完成systick的delay。 就差不多移植好了。
FreeRTOS移植过程?
(内核源码,头文件,内存,接口)
1.
下载源码
2.
拉取
FreeRTOSv9.0.0\FreeRTOS\Source
的所有
.c
文件
=>>
内核源码
3. 拉取
FreeRTOSv9.0.0\FreeRTOS\Source\portable{\MemMang,\RVDS\ARM_CM3}
4. 拉取
FreeRTOSv9.0.0\ FreeRTOS\Source\include
==
》头文件
5. 工程中
C++
配置目录
6. 修改
FreeRTOSConfig.h
文件,堆栈空间问题,时间节拍
7. 修改服务中断函数,
stm32f10x_it.c
,
SysTick_Handler(void)
8. 注释掉
PendSV_Handler()
、
SVC_Handler()
函数
Q: 嵌⼊式操作系统的硬实时和软实时如何理解
嵌⼊式操作系统问题
初始化:
-
定义历史样本数组
history
,⻓度为
FILTER_LENGTH,
初始值是
0
滤波过程:
-
对于每个新的输⼊值
newValue
:
-
将
newValue
添加到历史样本数组的开头
-
如果历史样本数组⻓度超过
FILTER_LENGTH
,移除最旧的样本值
-
计算历史样本数组中所有值的平均值,并将结果赋给
filteredValue
返回
filteredValue
作为滤波后的输出值
1
2
3
4
5
6
7
8
9
10
Plain Text
8
A: 硬实时就像是,必须按时响应,或完成任务,否则会有⼤问题。软实时有截⽌⽇期,但稍微晚⼀点完
成也不会有太⼤麻烦,只要不太拖延就⾏。硬实时对时间要求⾮常苛刻,⽽软实时对时间要求相对灵
活。嵌⼊式系统需要根据具体任务来选择使⽤哪种⽅式。硬实时可以是硬件中断来实现,软实时可以是
CPU时间⽚轮转来实现。
Q: 操作系统中信号量和互斥量有什么区别?
A :互斥量是⼆进制的,同时只有1个task可以访问资源, 信号量是计数的,多个task都可以使⽤信号
量,根据数值进⾏不同的业务逻辑。