面试(十)

目录

一. 单元测试

二. 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.mzph.cn/bicheng/55839.shtml

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

相关文章

如何优化低计算密集度神经网络在GPU和NPU上的性能

在深度学习领域&#xff0c;GPU 和 NPU 是常用的硬件加速器&#xff0c;它们凭借强大的并行计算能力显著提升了深度神经网络&#xff08;DNN&#xff09;的训练和推理速度。然而&#xff0c;并不是所有模型在 GPU 和 NPU 上都能得到理想的性能提升。对于一些计算密集度较低的任…

单体到微服务架构服务演化过程

单体到微服务架构服务演化过程 架构服务化 聊聊从单体到微服务架构服务演化过程 单体分层架构 在 Web 应用程序发展的早期&#xff0c;大部分工程是将所有的服务端功能模块打包到单个巨石型&#xff08;Monolith&#xff09;应用中&#xff0c;譬如很多企业的 Java 应用程序…

3、Docker搭建MQTT及Spring Boot 3.x集成MQTT

一、前言 本篇主要是围绕着两个点&#xff0c;1、Docker 搭建单机版本 MQTT&#xff08;EMQX&#xff09;&#xff0c;2、Spring Boot 3.x 集成 MQTT&#xff08;EMQX&#xff09;&#xff1b; 而且这里的 MQTT&#xff08;EMQX&#xff09;的搭建也只是一个简单的过程&#x…

数据结构单向链表

单向链表的转置 转置的思想&#xff1a; (1) 将头节点与当前链表断开&#xff0c;断开前保存下头节点的下一个节点&#xff0c;保证后面链表能找得到&#xff0c;定义一个q保存头节点的下一个节点&#xff0c;断开后前面相当于一个空的链表&#xff0c;后面是一个无头的单向链表…

uni-app之旅-day03-搜索

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 5. 搜索5.0 创建 search 分支5.1 自定义搜索组件5.1.2 my-search.vue组件通过自定义属性增强组件的通用性5.1.3 为自定义组件封装 click 事件 5.2 搜索建议5.2.1 渲…

C++拾趣——绘制Console中DropdownMenu

大纲 居中显示窗口清屏并重设光标绘制窗口绘制窗口顶部绘制下拉行绘制下拉框选项绘制按钮行绘制窗口底部 修改终端默认行为对方向键的特殊处理过程控制Tab键的处理Enter键的处理上下左右方向键的处理 完整代码代码地址 这次我们要绘制下拉菜单&#xff0c;如下图。 居中显示窗口…

【JavaEE】【多线程】Thread类讲解

目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像&#xff0c;作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

pg if条件语句

1.语法&#xff1a; 2.区别 IF 语句&#xff1a; 只能在 PL/pgSQL 中使用&#xff0c;不适合在直接的 SQL 查询中使用。没有返回值&#xff0c;仅仅是控制逻辑流程。适合用在存储过程、函数和触发器中。 CASE 语句&#xff08;在 PL/pgSQL 中&#xff09;&#xff1a; 可以在 P…

Comfyui segmentAnythingUltra V2报错

&#x1f385;问题表现及解决方案 Comfyui segmentAnythingUltra V2报错&#xff0c;找不到VITMatte模型&#xff0c;这个报错报的比较模糊&#xff0c;所以花了一点时间找模型。 简单来说&#xff0c;到huggingface上&#xff1a; https://huggingface.co/hustvl/vitmatte-s…

线性回归损失函数的推导

要推导损失函数公式 ℓ ( θ ) 1 2 n ( y ^ − y ) ⊤ ( y ^ − y ) \ell(\boldsymbol{\theta}) \frac{1}{2n}(\hat{\boldsymbol{y}} - \boldsymbol{y})^\top(\hat{\boldsymbol{y}} - \boldsymbol{y}) ℓ(θ)2n1​(y^​−y)⊤(y^​−y)&#xff0c;我们可以从几个基础概念开…

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…

Qt 图片显示 动态选择图片显示

在 Qt 中&#xff0c;显示图片通常使用 QLabel 和 QPixmap 进行图像的加载和显示。QPixmap 是专门用于显示图像的类&#xff0c;而 QLabel 则是一个可以容纳图片的小部件。 1、使用 QLabel 和 QPixmap 来显示图片&#xff1a; #include <QApplication> #include <QL…

windows配置java环境变量

windows如何配置java环境变量&#xff08;java环境变量配置教程&#xff09;_windowsjava环境变量配置-CSDN博客

Redis接口访问优化

说明&#xff1a;之前写过一篇使用Redis接口访问的博客&#xff0c;如下。最近有相关需求&#xff0c;把代码拿出来后&#xff0c;做了一些优化&#xff0c;挺有意思的&#xff0c;本文介绍在原基础上 使用Redis实现接口防抖 优化 总的来说&#xff0c;这次使用Redis实现接口…

【尚硅谷】RocketMQ 消息队列学习笔记

RocketMQ 和 Kafka 消息队列概念比较&#xff1f; 好的&#xff01;RocketMQ 和 Kafka 都是分布式消息队列系统&#xff0c;它们的核心概念有很多相似之处&#xff0c;但在具体实现和命名上有所不同。下面我通过一个表格来对比 RocketMQ 和 Kafka 中的五个概念&#xff1a;消息…

操作系统 | 学习笔记 | 王道 | 4.1 文件系统基础

4.文件管理 4.1 文件系统基础 4.1.1 文件的基本概念 定义 文件是以计算机硬盘为载体的存储在计算机上的信息集合&#xff0c;在用户进行的输入、输出中&#xff0c;以文件位基本单位。 文件管理系统是实现的文件的访问、修改和保存&#xff0c;对文件维护管理的系统。 文件的…

2024重生之回溯数据结构与算法系列学习(11)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化&#xff0c;adb连接手机设备。 需要的工具java编辑器&#xff1a;jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步&#xff1a;安装sdk&#xff0c;里面包含建立工具bu…

一、机器学习算法与实践_06迭代法和KMeans、线性回归、逻辑回归算法笔记

0 迭代法 迭代法不仅是机器学习、深度学习的核心&#xff0c;也是整个人工智能领域的重要概念&#xff0c;其对于算法的设计和实现至关重要 0.1 适合场景 对于不能一次搞定的问题&#xff0c;将其分成多步来解决&#xff0c;逐步逼近解决方案 0.2 典型应用 KMeans 聚类算法…