2024-4-2-freeRTOS作业

1.总结任务调度算法之间的区别,重新实现一遍任务调度算法的代码。

任务调度有三种:抢占式调度、时间片轮转调度算法、协作式调度。

抢占式调度:高优先级的任务可以打断低优先级任务的执行,适合用在优先级不同的任务间。

时间片轮转适合用在优先级相同的任务中,相同优先级的任务有相同的时间片,系统配置中的宏configTICK_RATE_HZ进行时间片大小的设置,当时间片耗尽,任务必须退出,调度机制较为公平。

协作式调度:两个任务协商运行,使用较少,主要靠和休眠函数osDelay()一起来实现调度。

2.总结静态创建任务和动态创建任务的区别,以及动态创建任务和静态创建任务的源码分析步骤。

(1)

i>静态创建任务适用于任务数量确定的情况,动态创建适用在任务随时申请随时释放的情况。

ii>动态创建消耗的系统资源要比静态创建消耗的资源多

iii>动态创建不需要指定具体的栈只需要指定栈的大小,栈会通过pvPortMalloc动态创建出来,静态创建任务需要具体的栈(通过数组来指定),还需要提供栈的大小。

(2)

系统主要是中osThreadNew来创建任务,而osThreadNew中以int32_t类型的变量mem来选择是动态创建或静态创建任务。

复制代码
//如果mem等于1就进行静态创建任务
 if (mem == 1) {
      hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t  *)attr->stack_mem,
                                                                                    (StaticTask_t *)attr->cb_mem);
    }

//如果mem等于0就进行动态创建任务
    else {
      if (mem == 0) {
        if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
          hTask = NULL;
        }
      }
    }

3.总结任务的状态,以及任务状态之间的转换关系。

(1)任务有四种状态:就绪态Ready、运行态Running、挂起态Suspended、阻塞态Blocked。

(2)

Ready -> Running 当调度器选择了当前任务,让当前任务的代码执行。

Ready -> Suspended 使用vTaskSuspend()进入挂起态

Suspended -> Ready 使用vTaskResume()进入就绪态

Blocked -> Suspended 使用vTaskSuspend()进入挂起态

Running -> Ready 当任务执行结束后,重新进入就绪态

Running -> Blocked Blocking API等待事件进入阻塞态

Running -> Suspended 使用vTaskSuspend()进入挂起态

4.面试题总结

1>

(1)通用输入输出接口

(2)电池、3.3V

(3)四种。阻塞态、运行态、就绪态、挂起态

(4)PWM是脉冲宽度调制,它主要通过波形控制电压大小

(5)高电平时间占整个周期时间的比例

2>

(1)开源的、实时的、轻量级操作系统

(2)

1.FreeRTOS占用内存较小,Linux占用内存较大

2.FreeRTOS性能较少,只能进行简单的操作,Linux性能较多,可以支持QT、网络编程

3.FreeRTOS是实时操作系统,Linux是通用操作系统

4.FreeRTOS只能在嵌入式系统中使用,Linux可以在嵌入式系统中使用、也可以在桌面系统上使用

(3)1个起始位、8个数据位、1个停止位和1个不经常使用的校验位

(4)(预分频系数+1)*(重装载值+1)/系统主频

(5)ADC是模拟信号转换成数字信号。模拟信号就是连续不断变换的信号,数字信号就是不连续变换的信号

3>

(1)两种。静态创建和动态创建;静态创建适用于任务数量确定的情况,动态创建适用于任务随时申请随时释放的情况。

(2)波特率的单位是bit/s,主要表示串口数据传输的快慢。波特率的设置要注意传输双方的波特率大小要一致。且DMA传输数据比较快,适用于处理图片、视频、音频等数据量较大的场合。

(3)DMA是直接存储器存储数据。采用DMA传输数据时不占用CPU资源,可以减轻CPU负担,提高CPU利用率。

(4)挂起的任务只是阻塞了,可以恢复;删除的任务没法恢复,只能重新创建。

(5)三种。抢占式调度、时间片轮转、协作式调度。

相关推荐
OpenBayes贝式计算12 小时前
流式 3D 重建新突破!LingBot-Map 融合 Trajectory Memory 与几何上下文;12.6 万 QA 样本!
计算机视觉·开源·agent
明飞198712 小时前
预处理指令
c语言
赏金术士12 小时前
Kotlin 从入门到进阶 之作用域函数 & 优雅写法(五)
android·开发语言·kotlin
openKaka_12 小时前
从 scheduleUpdateOnFiber 到 Root 微任务调度:React 如何把更新交给调度系统
开发语言·前端·javascript
梦梦代码精12 小时前
《企业开源商城选型:商业闭环、二次开发与成本平衡》
java·开发语言·低代码·开源·github
前进的李工12 小时前
智能Agent实战指南:记忆组件嵌入技巧(记忆)
开发语言·前端·javascript·python·langchain·agent
Elihuss12 小时前
RK3588开源GPU移植流程
开源
用户3235203734313 小时前
DeepSeek-TUI:一位 Rust 开发者视角下的终端 AI 编码代理
开源·客户端
测试员周周13 小时前
【AI测试功能5】AI功能测试的“黄金数据集“构建指南:从0到1搭建质量评估体系
运维·服务器·开发语言·人工智能·python·功能测试·集成测试
计算机魔术师13 小时前
【AI面试八股文 Vol.1.4 | 专题6:工具调用失败重试】别再让模型裸着重跑:错误信息注入 Observation,才是让 Agent 自修正的关键
开源