用过哪些嵌入式操作系统?使⽤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都可以使⽤信号
量,根据数值进⾏不同的业务逻辑。