网站建设 亿安网络,.net网站程序,姑苏区网站建设,什么是标记型网页制作工具模拟面试#xff1a;
一、GPIO是什么#xff1f;
答#xff1a;通用输入输出接口#xff0c;可以作为单片机和外部设备连接的桥梁。
二、VCC是什么? VCC通常是多少V?
答#xff1a;电源#xff0c;通常是3.3V和5V。
三、FreeRTOS任务有几种状态#xff0c;分别是…
模拟面试
一、GPIO是什么
答通用输入输出接口可以作为单片机和外部设备连接的桥梁。
二、VCC是什么? VCC通常是多少V?
答电源通常是3.3V和5V。
三、FreeRTOS任务有几种状态分别是什么状态?
答4种分别是: 就绪态、运行态、阻寒态、挂起态。
四、PWM是什么东西?
答脉冲宽度调制可以通过控制电压来改变外部设备的状态。
五、占空比是什么? 答高电平占整个周期时间的比例即(高电平 / 周期时间) * 100%。
六、FreeRTOS是什么?
答 是一种开源的、实时的操作系统是一款轻量型的操作系统。
七、FreeRTOS 和 Linux 的区别
答1.内存占用: FreeRTOS 是一款轻量级的操作系统占用内存较小Linux 占用内存较大。 2.性能: FreeRTOS 没有 Linux 操作系统性能强Linux 支持网络、OT等等Linux功能较多。 3.应用领域: FreeRTOS 主要是运用在嵌入式设备上Linux 既可以运行在嵌入式设备也可以运行在桌面系统上。 4.FreeRToS 是实时操作系统(可以在规定时间完成对应的任务)Linux 是通用操作系统。
八、描述一下串口的数据帧格式
答帧数据有起始位、数据位、停止位可以有校验位。 起始位: 标志着开始发送数据 数据位: 要发送的数据 停止位: 标志着一次数据发送的结束 校验位: 确保数据传输的正确性(可有可无)
九、定时器的定时时间怎么计算
答定时时间 (s) (预分频系数 1) * (重装值 1)/系统时钟主频 (MHZ)
十、ADC是什么?模拟信号? 数字信号?
答ADC: 模拟数字信号转换器 模拟信号: 连续的信号 数字信号:不连续的信号 (0和1组成)
十一、FreeRTOS创建任务有几种方式? 描述一下
答动态创建和静态创建两种。 (1)动态创建任务无需指定具体的栈只需要给定栈的大小即可它会调用 vportmalloc函数自己指定静态创建任务既需要制定具体的栈可以使用数组来指定也需要给定栈的大小 (2)动态创建任务耗费的资源比静态创建任务耗费的资源多 (3)动态创建任务适用于需要随时申请和随时释放的场景而静态创建任务适用于明确任务具体数目的场景
十二、串口中波特率是干什么的? 设置需要注意什么
答用来表示数据发送和接收的速度快慢的单位是 bit 电脑和单片机通信时要注意一定要将二者波特率设为一致。
十三、DMA是什么? 作用是什么?
答DMA: 直接存储器存储(既可以存数据也可以读数据)。 作用: 1.减轻CPU的负担提高了CPU的资源利用率 2.DMA传输数据较快适用于处理图片、视频、音频等数据量较大的场合。
十四、任务的挂起和任务的删除有什么区别?
答任务挂起时: 任务不运行但存在再次使用时只需要从挂起状态中唤醒即可无需重新创建 任务删除时: 任务不存在再次使用时需要重新创建
十五、FreeRTOS有哪几种调度算法
答抢占式调度、时间片轮转、协作式调度 1.总结任务调度算法之间的区别重新实现一遍任务调度算法的代码。
(1)抢占式调度高优先级任务可以打断低优先级任务用于任务优先级不同的任务 (2)时间片轮转相同优先级的任务分配相同的时间片(一般为 1ms)当任务的时间片用完后必须退出 (3)协作式调度一般使用 osDelay 实现任务之间协商着执行相当于是抢占式调度时间片轮转
2.总结静态创建任务和动态创建任务的区别以及动态创建任务和静态创建任务的源码分析步骤。
(1)动态创建任务无需指定具体的栈只需要给定栈的大小即可它会调用 vportmalloc函数自己指定静态创建任务既需要制定具体的栈可以使用数组来指定也需要给定栈的大小 (2)动态创建任务耗费的资源比静态创建任务耗费的资源多 (3)动态创建任务适用于需要随时申请和随时释放的场景而静态创建任务适用于明确任务具体数目的场景
3.总结任务的状态以及任务状态之间的转换关系。
任务的状态就绪态、运行态、阻塞态、挂起态 就绪态---运行态任务一经创建就处于就绪态当程序执行任务时就进入运行态 运行态---就绪态当任务执行结束后就会回到就绪态
就绪态---挂起态通过 vTaskSuspend() 函数可以将任务挂起可以实现从就绪态转换为挂起态 挂起态---就绪态通过 vTaskResume() 函数可以将任务从挂起状态中恢复可以实现从挂起态转换为就绪态
运行态---挂起态通过 vTaskSuspend() 函数可以将任务挂起可以实现从运行态转换为挂起态
阻塞态---挂起态通过 vTaskSuspend() 函数可以将任务挂起可以实现从阻塞态转换为挂起态
阻塞态---就绪态当等待的事件完成后时间、信号量、互斥量等满足条件时就可以从阻塞态进入就绪态
运行态---阻塞态当处于等待事件发生的状态时就会进入阻塞态
4.抢占式调度
void StartDefaultTask(void *argument)
{/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){printf(StartDefaultTask is start\r\n);if(Task2Handle NULL){Task2Handle osThreadNew(Task2, NULL, Task2_attributes);}printf(StartDefaultTask is end\r\n);osDelay(500);}/* USER CODE END StartDefaultTask */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
void Task2(void *argument)
{for(;;){printf(Task2 is running\r\n);osDelay(500);}
}
5.时间片轮转
void StartDefaultTask(void *argument)
{/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */int i0;for(;;){printf(StartDefaultTask is start\r\n);for(i 0;i 10000000;i){; //消耗时间}printf(StartDefaultTask is end\r\n);osDelay(500);}/* USER CODE END StartDefaultTask */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* brief Function implementing the myTask02 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){printf(StartTask02 is running\r\n);osDelay(500);}/* USER CODE END StartTask02 */
}