面试(十)

目录

一. 单元测试

二. FreeRTOS和裸机哪个实时性好?

三. 怎么判断某个程序的运行时间

四. 函数指针

五. 全局变量被线程使用冲突

5.1 使用互斥锁

5.2 使用读写锁 

5.3 使用原子操作

六. 局部变量没有初始化是什么值

七. uint_8 n = 255 , n++等于多少

八. 临界区

九. STM32使用串口,dma

十. keil中如何查看代码大小

10.1 Code,包含两部分,即代码和数据

10.2  RO Data: read-only data,只读的数据

10.3  RW Data: read write data,可读写的数据

10.4 ZI Data: zero initialized data,零初始化的可读写变量

十一. volatile的作用,举例

十二. STM32F407VGT6的FLASH和SRAM大小

十三. 联合体什么时候用的着

十四. 结构体对齐

十五. 软硬件分离

十六. freertos中一般一个任务创建多大栈


一. 单元测试

"单元"指的是软件中最小的可测试部分,通常是一个函数:方法或类。它是程序的一个独立功能模块,能够接收输入并返回输出。

二. FreeRTOS和裸机哪个实时性好?

实时:系统能够在严格的时间限制内响应事件和处理任务

Freertos可以实现实时是因为

1. 优先级调度        FreeRTOS允许开发者为每个任务设置优先级,确保关键任务能够在需要时及时执行

2. 低延迟上下文切换

3. 中断管理

4. 任务间通信机制

三. 怎么判断某个程序的运行时间

看门狗用于监控程序的运行状态,确保程序在规定的时间内正常执行。

看门狗的基本实现思路:

定期喂狗:在程序的关键执行路径中定期重置看门狗计数器,以表示程序运行正常

超时处理:如果在规定的时间未重置看门狗,触发相应的故障处理机制

四. 函数指针

函数指针是指向函数的指针变量,它允许你在运行时动态调用函数。

#include <stdio.h>void process(int (*func)(int), int value) {printf("Result: %d\n", func(value));
}int square(int x) {return x * x;
}int doubleValue(int x) {return x * 2;
}int main() {process(square, 5);      // 输出: Result: 25process(doubleValue, 5); // 输出: Result: 10return 0;
}

五. 全局变量被线程使用冲突

多个线程可以同时访问和修改同一变量

5.1 使用互斥锁

#include <stdio.h>
#include <pthread.h>int global_var = 0;
pthread_mutex_t mutex;void* thread_function(void* arg) {pthread_mutex_lock(&mutex); // 加锁global_var++;printf("Global var: %d\n", global_var);pthread_mutex_unlock(&mutex); // 解锁return NULL;
}int main() {pthread_t threads[10];pthread_mutex_init(&mutex, NULL); // 初始化互斥锁for (int i = 0; i < 10; i++) {pthread_create(&threads[i], NULL, thread_function, NULL);}for (int i = 0; i < 10; i++) {pthread_join(threads[i], NULL);}pthread_mutex_destroy(&mutex); // 销毁互斥锁return 0;
}

5.2 使用读写锁 

如果读操作远多于写操作,可以使用读写锁来提高性能。读写锁允许多个线程同时读取,但在写入时会被锁定

5.3 使用原子操作

原子操作是指在多线程或并发环境中,某个操作要么完全执行,要么完全不执行,无法被中断。

"原子操作"这个术语源于物理学中的"原子"概念,意为不可分割的最小单位,不可拆分。

六. 局部变量没有初始化是什么值

局部变量未初始化时,其值是未定义的,使用之前应确保进行初始化。

如果你尝试打印一直为0,可能原因:

内存清零:某些开发环境在调试模式下可能会自动将局部变量初始化为0

程序逻辑:在使用局部变量之前进行了其他操作,可能会影响到打印的值

七. uint_8 n = 255 , n++等于多少

回绕到0

八. 临界区

指一个代码段,在这个段内,访问共享资源时必须防止被其他任务中断

九. STM32使用串口,dma

#include "stm32f4xx_hal.h"UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_DMA_Init(void);void MX_DMA_Init(void) {// 初始化 DMA 控制器时钟__HAL_RCC_DMA2_CLK_ENABLE();// 配置 DMAhdma_usart1_rx.Instance = DMA2_Stream5;hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; // USART1 对应的 DMA 通道hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; // 从外设到内存hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; // 外设地址不增hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; // 内存地址增hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // 外设数据对齐hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; // 内存数据对齐hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; // 循环模式hdma_usart1_rx.Init.Priority = DMA_PRIORITY_HIGH; // 高优先级HAL_DMA_Init(&hdma_usart1_rx);// 将 DMA 与 USART 关联__HAL_LINKDMA(&huart1, hdmarx, hdma_usart1_rx);
}void MX_USART1_UART_Init(void) {huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart1);
}

十. keil中如何查看代码大小

10.1 Code,包含两部分,即代码和数据

- code,即程序代码部分
- inline data. For example, literal pools(文字常量池), and short strings(短字符串)等. 这个一般被忽略,请大家注意!!!
- 代码段,存放程序的代码部分。

10.2  RO Data: read-only data,只读的数据

10.3  RW Data: read write data,可读写的数据

10.4 ZI Data: zero initialized data,零初始化的可读写变量

十一. volatile的作用,举例

告诉编译器某个变量可能会在程序的其他地方被意外修改

硬件寄存器:当变量映射到硬件寄存器,硬件可能会在没有程序明确操作的情况下改变这些值。

十二. STM32F407VGT6的FLASH和SRAM大小

FLASH大小为1024Kbytes,SRAM大小为192Kbytes

十三. 联合体什么时候用的着

允许在同一内存位置存储不同的数据类型,但在任意时刻只能用一个类型

节省内存:需要在同意内存区域存储不同类型的数据,但只在某一时刻使用其中之一,联合体可以节省内存

不同数据格式的表示:当数据需要以不同的格式进行处理时,可以使用联合体

十四. 结构体对齐

是指结构体中各个成员变量在内存中的排列方式。对齐通常是取决于最大成员的对齐要求

十五. 软硬件分离

使用硬件抽象层,将硬件特性封装在库中,让上层应用程序通过统一的接口与硬件进行交互。这样,应用程序与硬件实现相互独立。

十六. freertos中一般一个任务创建多大栈

简单任务:对于简单的任务,例如处理轻量级的信号或周期性任务,通常可以使用较小的栈,例如 128 字节到 256 字节。

中等复杂任务:对于需要处理一些数据或进行复杂计算的任务,建议使用 512 字节到 1024 字节的栈。

复杂任务:对于需要大量局部变量、递归调用或使用复杂数据结构的任务,栈大小可能需要更大,例如 2048 字节或更多。

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

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

相关文章

Unity UndoRedo(撤销重做)功能

需求 撤销与重做功能 思考 关于记录的数据的两点思考&#xff1a; 记录操作记录影响显示和逻辑的所有数据 很显然这里就要考虑取舍了&#xff1a; 记录操作 这种方案只需要记录每一步的操作&#xff0c;具体这个操作要怎么渲染和实现出来完全需要自己去实现&#xff0c;这…

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

手撕数据结构 —— 栈(C语言讲解)

目录 1.认识栈 什么是栈 栈的示意图 2.如何实现栈 3.栈的实现 Stack.h中接口总览 具体实现 结构的定义 初始化栈 销毁栈 入栈 出栈 取栈顶元素 获取有效元素的个数 判断栈是否为空 4.完整代码附录 Stack.h Stack.c 1.认识栈 什么是栈 栈是一种特殊的线性表…

学视频剪辑需要电脑吗 学视频剪辑需要什么条件

态度决定成败&#xff0c;学剪辑亦是如此。我们都在学习剪辑的道路上寻找答案&#xff0c;电脑就像指引答案的工具&#xff0c;但它本身并不是答案。所以&#xff0c;好电脑不等于好剪辑师。想要学好视频剪辑&#xff0c;你只需要一个态度端正的自己。有关学视频剪辑需要电脑吗…

Spring Cloud Stream 3.x+kafka 3.8整合

Spring Cloud Stream 3.xkafka 3.8整合&#xff0c;文末有完整项目链接 前言一、如何看官方文档(有深入了解需求的人)二、kafka的安装tar包安装docker安装 三、代码中集成创建一个测试topic&#xff1a;testproducer代码producer配置&#xff08;配置的格式&#xff0c;上篇文章…

基于SpringBoot+Vue的疫苗预约接种管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

DELL R720服务器阵列数据恢复,磁盘状态为Foreign

服务器无法正常进入系统&#xff0c;物理磁盘状态变成了Foreign 虚拟磁盘状态变成了Failed 阵列已经丢失了&#xff0c;需要手工强制导入外部配置 单击 Main Menu 屏幕上的 Configuration Management。单击 Manage Foreign Configuration 单击 Preview Foreign Configurati…

60. 排列序列【回溯】

文章目录 60. 排列序列解题思路Go代码 60. 排列序列 60. 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; “123”“132”“213”“231”“31…

VMDK 0X80BB0005 VirtualBOX虚拟机错误处理-数据恢复——未来之窗数据恢复

打开虚拟盘文件in7.vmdk 失败. Could not get the storage format of the medium 7\win7.vmdk (VERR_NOT_SUPPORTED). 返回 代码:VBOX_E_IPRT_ERROR (0X80BB0005) 组件:MediumWrap 界面:IMedium {a a3f2dfb1} 被召者:IVirtualBox {768 cd607} 被召者 RC:VBOX_E_OBJECT_NOT_F…

Qt基础对话框QDialog

模态显示对话框 调用exec方法可以使得对话框模态显示&#xff0c;但是一个阻塞函数 [virtual slot] int QDialog::exec() 对话框的三个槽函数 accept [virtual slot] void QDialog::accept(); reject [virtual slot] void QDialog::reject() done [virtual slot] void QDia…

Nginx从入门到实战(八):版本平滑无感知,不停机升级

一、查看旧版本信息 可以通过nginx -V命令&#xff0c;来查看当前nginx的版本信息&#xff0c;和配置参数。 [rootnb001 sbin]# nginx -V -bash: nginx: command not found [rootnb001 sbin]# ./nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat …

Spring Boot读取resources目录下文件(打成jar可用),并放入Guava缓存

1、文件所在位置&#xff1a; 2、需要Guava依赖&#xff1a; <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency>3、启动时就读取放入缓存的代码&#xf…

gaussdb hccdp理论考试总结

判断题1分&#xff0c;单选题2分&#xff0c;多选题3分 共50道题&#xff0c;满分100分&#xff0c;60分通过。 理论考试知识点占比&#xff1a; 理论考试参考策略&#xff1a; 1.7张PPT看一遍 2.思考题做一遍 3.模拟题做一遍 4.7张PPT再看一遍 5.考题知识点过一遍 6.考试前一…

ZYNQ使用XGPIO驱动外设模块(前半部分)

目录 目录 一、新建BD文档&#xff0c;添加ZYNQ处理器 1.BD文档: 2.在Vivado中&#xff0c;BD文件的生成过程通常包括以下步骤&#xff1a; 1)什么是Tcl Console: 3.PL部分是FPGA可编程逻辑部分&#xff0c;它提供了丰富的IO资源&#xff0c;可以用于实现各种硬件接口和功…

QT 连接SQL SEVER 之后无法读取浮点和整型

1、ODBC Driver 的版本要对应上。 if (!strDbDirPath.isEmpty())m_strDbDirPath strDbDirPath;m_strDatabaseName strDatabaseName;if (m_database.isOpen() || m_bConnected){qDebug() << QString("QODBC:已经连接成功&#xff01;") << "\n&quo…

Power Pivot, PowerView和PowerBI在产品宣传,功能,及本质上有什么不同?

微软的Power Pivot、Power View和Power BI是三个不同的数据分析和商业智能工具&#xff0c;它们在产品宣传、功能和本质上有所区别&#xff0c;并且各自适用于不同的场景。 1. Power Pivot Power Pivot是一种数据建模技术&#xff0c;用于在Excel中创建数据模型&#xff0c;建…

Halcon 3D应用 - 胶路提取

1. 需求 本文基于某手环&#xff08;拆机打磨处理&#xff09;做的验证性工作&#xff0c;为了项目保密性&#xff0c;只截取部分数据进行测试。 这里使用的是海康3D线激光轮廓相机直线电机的方式进行的高度数据采集&#xff0c;我们拿到的是高度图亮度图数据。 提取手环上的胶…

Java面向对象编程--高级

目录 一、static关键字 1.1 静态变量 1.2 静态内存解析 1.3 static的应用与练习 二、单例设计模式 2.1 单例模式 2.2 如何实现单例模式 三、代码块 3.1 详解 3.2 练习&#xff0c;测试 四、final关键字 五、抽象类与抽象方法 5.1 abstract 5.2 练习 六、接口 6.…

d3dcompiler_47.dll缺失怎么修复,马上教你六种靠谱的方法

在使用计算机的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中一个就是某些dll文件缺失。比如d3dcompiler_47.dll&#xff0c;这个文件是DirectX的一部分&#xff0c;主要用于编译DirectX的着色器代码。当这个文件缺失时&#xff0c;一些程序就无法正常运行了&…

typescript使用webpack打包编译问题

解决方案&#xff1a;在webpack.config.js中的mdule.exports中设置mode。 再次运行npm run start即可。