2024.4.2

模拟面试:

一、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 i=0;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 */
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB科研绘图与学术图表绘制从入门到精通

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

二轮电动自行车充电桩开源系统

文章目录 一、产品功能部分截图1.手机端&#xff08;小程序、安卓、ios&#xff09;2.PC端 二、小程序体验账号以及PC后台体验账号1.小程序体验账号2.PC后台体验账号关注公众号获取最新资讯 三、产品简介&#xff1f;1. 充电桩云平台&#xff08;含硬件充电桩&#xff09;&…

`@Autowired`

Autowired 是Spring框架中的一个注解&#xff0c;用于实现依赖注入。当你在一个类的字段、构造函数或方法上使用Autowired注解时&#xff0c;Spring容器会在创建该类实例的过程中自动寻找匹配的bean&#xff0c;并将其注入到相应的位置。 这里是Autowired注解的一些使用场景和…

【xinference】(8):在autodl上,使用xinference部署qwen1.5大模型,速度特别快,同时还支持函数调用,测试成功!

1&#xff0c;关于xinference Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 Xor…

外部工具包不要依赖服务的环境变量

1. 前言 虽然这周才过去一天&#xff0c;但自己真的是被bug围住了&#xff0c;果然程序员每天的工作就是在写bug<->解决bug中无限循环。今天遇到了之前给项目写的一个工具包的bug&#xff0c;这个工具包因为需要抽出来给到其他组使用&#xff0c;所以抽成了类工具包的一…

互联网、因特网、万维网的区别

互联网 internet&#xff1a;凡是能彼此通信的设备组成的网络就叫互联网&#xff0c;即使只有两台计算机&#xff0c;无论以何种技术使其彼此通信&#xff0c;都叫互联网。所以&#xff0c;根据互联网的覆盖规模可以分为&#xff1a; 局域网&#xff08;Local Area Network&am…

初学者必看!Python wtforms库让你轻松创建和验证Web表单

1. 什么是WTForms 库? WTForms 是一个 Python 库&#xff0c;用于在 Web 应用程序中创建和验证表单。它提供了一个简单的接口来定义表单字段和验证规则&#xff0c;并将它们呈现为 HTML 表单。WTForms 支持多种 Web 框架&#xff0c;包括 Flask、Django 和 Pyramid。 2. 核心…

NSSCTF Round#20 Basic 真亦假,假亦真 CSDN_To_PDF V1.2 出题笔记 (附wp+源码)

真亦假&#xff0c;假亦真 简介&#xff1a;java伪造php一句话马。实则信息泄露一扫就出&#xff0c;flag在/flag里面。 题目描述&#xff1a;开开心心签个到吧&#xff0c;祝各位师傅们好运~ 静态flag&#xff1a;NSS{Checkin_h4v3_4_g00D_tINNe!} /路由显示 <?php e…

【MyBatis】MyBatis的日志实现

目录 一、日志演变 二、MyBatis中实现日志管理 1.导入pom依赖 2.添加logback配置文件 3.日志打印 三、MyBatis日志技术实现原理 3.1 初始化 3.2 具体实现类 3.3 自己模拟实现mybaits的日志实现 四、架构系统如何考虑日志 一、日志演变 JDK 1.4之前 没有任何的日志框…

vue 移动端弹窗带滚动效果 滚动到底的时候弹窗下的页面会跟着滑动

<template><div class"wrap" :style"dynamicStyle"><!--dynamicStyle主要是介个 通过computed设置postion的值 弹窗的时候设置为fixed 关闭弹窗的时候设置为unset--><div class"banner-wrap"><img src"/assets/…

16.Python多线程

如果想让我们的程序同时执行多个任务&#xff0c;就需要使用多线程技术了 。到目前为止&#xff0c;我们编写的程序都是单线程的&#xff0c;在运行时一次只能执行 一个任务。 1 线程相关的知识 1.1 进程 一个进程就是一个正在执行的程序&#xff0c;每一个进程都有自己独立…

sklearn主成分分析PCA

文章目录 基本原理PCA类图像降维与恢复 基本原理 PCA&#xff0c;即主成分分析(Principal components analysis)&#xff0c;顾名思义就是把矩阵分解成简单的组分进行研究&#xff0c;而拆解矩阵的主要工具是线性变换&#xff0c;具体形式则是奇异值分解。 设有 m m m个 n n …

Linux内存管理 —— 通过实验学习和理解CoW(2)

文章目录 作者环境概述正文父进程执行fork时将可写的页面设置成只读copy_mmdup_mmdup_mmapcopy_page_range父进程首先写时,触发CoWhandle_pte_faultdo_wp_pagewp_page_copy子进程随后在写时触发缺页作者 pengdonglin137@163.com 环境 Linux-6.5 + ARM64 概述 前一篇通过实…

Rust---有关介绍

目录 Rust---有关介绍变量的操作Rust 数值库&#xff1a;num某些基础数据类型序列(Range)字符类型单元类型 发散函数表达式&#xff08;&#xff01; 语句&#xff09; Rust—有关介绍 得益于各种零开销抽象、深入到底层的优化潜力、优质的标准库和第三方库实现&#xff0c;Ru…

蚁剑流量分析

蚁剑流量分析 在靶机上面上传一个一句话木马&#xff0c;并使用蚁剑连接&#xff0c;进行抓包, 一句话木马内容 <?php eval($_POST[1]); defalut编码器 在使用蚁剑连接的时候使用default编码器 连接之后进行的操作行为是查看当前目录(/var/www/html)下的文件&#xff0…

数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

千万不要因为一件事不会做而失去信心&#xff0c;你又不是只有这一件事不会&#xff0c;你还有很多呢 一、插入排序 1.直接插入排序 InsertSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.希尔排序 ShellSort 2.1 基本思想 2.2 实现原理 …

Sora 基础作品之 DiT:Scalable Diffusion Models with Transformer

Paper name Scalable Diffusion Models with Transformers (DiT) Paper Reading Note Paper URL: https://arxiv.org/abs/2212.09748 Project URL: https://www.wpeebles.com/DiT.html Code URL: https://github.com/facebookresearch/DiT TL;DR 2022 年 UC Berkeley 出…

罗克韦尔AB的PLC协议和西门子PLC协议转换网关

下面是罗克韦尔(AB)的Compact系列的PLC与西门子S7-1500之间的通讯的配置&#xff0c;实现AB的标签数组与西门子DB数据块之间通讯。 首先在AB的PLC内建立输入和输出数组&#xff0c;用于接收和写入S7-1500的PLC数据&#xff0c;名称分别是IN_INT16、OUT_OUT16&#xff0c;输入80…

为“自研”的KV数据库编写JDBC驱动

一觉醒来&#xff0c;受到梦的启发&#xff0c;自研了一套K/V数据库系统&#xff0c;因为"客户"一直催促我提供数据库的JDBC驱动&#xff0c;无奈之下&#xff0c;只好花费一个上午的时间为用户编写一个。 我们知道&#xff0c;JDBC只定义一系列的接口, 具体的实现需…

6个黑科技网站,永久免费

1、http://mfsc123.com https://www.mfsc123.com 一个非常赞的免费商用素材导航网站。 收集了各种免费、免版权的图片、插画、视频、视频模板、音乐、音效、字体、图标网站。 再也不用担心版权问题&#xff0c;都能免费商用&#xff0c;自媒体作者必备。 而且还在每个网站…