合川网站制作,公司网站开发怎么做账,网络广告营销策略,网站制作需要多少钱?嵌 入 式 软 件 笔 试 题要求#xff1a;闭卷考试#xff08;不能翻书、不能开电脑#xff09;#xff1b;作答时间50分钟#xff1b;共10道题目。volatile的作用有哪些volatile#xff1a; 防止编译器对代码进行优化#xff0c;直接从内存中取最新的值 应用场景#x…嵌 入 式 软 件 笔 试 题要求闭卷考试不能翻书、不能开电脑作答时间50分钟共10道题目。volatile的作用有哪些volatile 防止编译器对代码进行优化直接从内存中取最新的值 应用场景 1、多线程使用同一资源时 2、单片机开发中volatile 的作用1. 核心功能告知编译器变量的值可能被当前代码块外的因素如中断服务程序、硬件寄存器、其他线程异步修改禁止编译器对该变量进行 “将内存值缓存到寄存器” 的优化确保每次访问都直接读取内存最新值。应用场景1. 多线程 / 多任务环境中共享变量如线程间标志位2. 嵌入式硬件寄存器访问如单片机的 GPIO 数据寄存器、定时器计数寄存器3. 中断服务程序ISR与主程序共享的全局变量。关键字const 和static有什么含意Const :“只读属性”限制变量 / 指针 / 参数的值不可被修改编译时会检查写操作并报错Static静态函数可以延长生命周期和限定作用域1. const 关键字含义
用于定义 “只读属性”限制变量 / 指针 / 参数的值不可被修改编译时会检查写操作并报错常见场景
- 修饰变量const int a 10;a 的值不可修改
- 修饰指针
- const int* p指针指向的值不可改
- int* const p指针本身地址不可改
- 修饰函数参数void func(const int x)函数内不可修改 x
- 修饰函数返回值const int func()返回值不可被赋值修改。2. static 关键字含义
用于 “延长生命周期” 和 “限定作用域”分三类场景
- 局部静态变量void func(){ static int a 0; a; }生命周期延长至程序结束作用域仅在函数内初始化仅 1 次
- 全局静态变量static int g_a 10;作用域限定在当前.c 文件避免外部文件通过extern调用
- 静态函数static void func(){}作用域限定在当前.c 文件防止与外部文件函数重名冲突。用变量a给出下面的定义1) 一个整型数 int a2)一个指向整型数的指针 int *a3)一个指向指针的的指针它指向的指针是指向一个整型数 int **a;下面的代码输出是什么为什么printf为打印函数void foo(void)
{unsigned int a 6;int b -20;(ab 6) ? printf( 6) : printf( 6);
}输出是6,因为不同无符号 / 有符号整型运算时会触发 “隐式类型转换”—— 将int有符号转换为unsigned int无符号C 语言中不同无符号 / 有符号整型运算时会触发 “隐式类型转换”—— 将int有符号转换为unsigned int无符号
1. 变量值a 6unsigned int二进制为000...000110b -20int32 位补码为111...1101100
2. 转换后b作为 unsigned int 时值为2^32 - 20 4294967276
3. 计算a b 6 4294967276 4294967282远大于 6故执行printf( 6)。中断是嵌入式系统中重要的组成部分这导致了许多编译开发商提供一种扩展让标准C支持中断产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序请指出以下这段代码错误的地方。__interrupt double compute_area(double radius){double area PI * radius *radius;printf(nArea %f, area);return area;} 该中断服务子程序ISR存在 5 处核心错误1. 返回值错误ISR 是异步触发的 “被动执行函数”没有调用者接收返回值必须定义为void不能返回double2. 参数错误中断触发时无法传递参数无调用上下文ISR 不能带参数如double radius3. 调用非可重入函数printf是标准库函数内部包含浮点运算、全局缓冲区操作且可能依赖中断使能属于 “非可重入函数”ISR 要求 “快进快出”禁止调用非可重入、耗时函数4. 浮点运算风险嵌入式系统中double浮点运算需硬件 FPU 支持且运算耗时较长不符合 ISR “短延迟” 要求5. PI 未定义若未通过#define PI 3.14159宏定义 PI编译会报 “未声明标识符” 错误非核心但需修正。嵌入式系统中经常要用到无限循环用C语言编写死循环的代码 While11. while(1){}最常用明确循环体为空
2. for(;;){}for循环的初始化、条件、增量均可省略条件省略视为 “永真”
3. do{}while(1);先执行一次循环体再判断永真条件。给定一个整型变量a写两段代码第一个设置a的bit 3第二个清除a 的bit 3。在以上两个操作中要保持其它位不变。 设置 aI0x3偏移量 设置 a ~0x3偏移量已知 int 数组a[1000]需要将数组的后 100 个数据移动到前面前面的数据依次后退。例如若数组初始存入的数据是 1、2、3……1000移动后的数据结果是 901、902……1000、1、2……900。用代码实现。使用memcoy#include string.hvoid move_array(int a[], int n, int m) { int t[100]; memcpy(t, a n - m, m * sizeof(int)); for(int i n - 1; i m; i--) a[i] a[i - m]; memcpy(a, t, m * sizeof(int));}int main() { int a[1000]; for(int i 0; i 1000; i) a[i] i 1; move_array(a, 1000, 100); return 0;} 简述SPI的传输特点、方式并画出工作时序传输特点1.通信属性串行数据逐位传同步依赖sclkspi时钟同步全双工同一时钟周期内主机经mosi发、从机经miso发双向同时传速率与数据“高速 3.4Mbps” 是 HS-mode需区分 “标准模式100Kbps、快速模式400Kbps、高速模式3.4Mbps速率达mbps级最小单位为字节8/16位1时钟周期传1位1字节需8时钟周期主从模式支持主从机常用“单主机多从机”主机控制sck时钟和nss片选从机被动响应从机选择通过专属的nss/ncs片选线主机拉低目标从机nss电平建立通信其他从机nss保持高电平不响应传输方式主从逻辑主机输出sck和nss经mosi发数据从机按sck节奏收mosi数据经miso回传数据全双工实现如主机发 0xFF、从机发 0x00SCK 上升沿时二者分别经 MOSI/MISO 发 1 位下降沿时分别读对方数据8 时钟周期后双方均完成 “发 收”多从机传输四线制连接sck、mosi、miso共线各从机独立接主机nss主机拉低对应从机nss实现“一对一”通信避免冲突。工作时序图简述I2C的传输特点、方式并画出工作时序从机地址、寄存器地址、数据自定义一、I2C 传输特点传输类型串行逐位传、同步依赖 SCL 时钟同步、半双工同一时间单向传硬件结构仅 2 根双向线SCL 时钟、SDA 数据均需外接上拉电阻空闲时保高电平、稳电路速率分级低速 100Kbps、中速 400Kbps、高速 3.4Mbps主从架构支持单 / 多主机多从机主机主动发起 / 结束通信从机被动响应唯一寻址从机均有唯一 7 位地址如 SHT20 为 0x40主机通过地址定位从机应答机制每传 1 字节8 位接收器第 9 时钟周期回 ACK0成功或 NACK1失败 / 停止。二、I2C 传输方式1. 主机→从机写传输主机发起始信号S占总线发 “7 位从机地址 W0”如 SHT20 写地址 0x80从机回 ACK发目标寄存器地址如 SHT20 温度寄存器 0xE3从机回 ACK发自定义数据如配置值 0x55从机回 ACK主机发终止信号P释总线。2. 主机←从机读传输先写后读主机发起始信号S发 “7 位从机地址 W”如 0x80从机回 ACK发目标寄存器地址如 SHT20 湿度寄存器 0xE5从机回 ACK主机发重复起始信号S发 “7 位从机地址 R1”如 SHT20 读地址 0x81从机回 ACK从机发自定义数据如 2 字节湿度值 0x1234每字节主机回 ACK主机收完回 NACK停传主机发终止信号P。三、I2C 工作时序以 SHT20 读温度为例1. 时序参数从机地址7 位 0x40寄存器地址0xE3温度寄存器自定义数据2 字节温度值0x1A、0x5B时钟周期1 个高 低电平传 1 位需 1 周期。2. 时序文字示意信号时序高电平 “┌───┐”低电平 “───”阶段说明SCL──┐ ┌───┐×8 ┌───┐ ┌───┐×8 ┌───┐×2 ┌───┐时钟同步SDA──┼───┼───┼×8───┼───┼───┼×8───┼───┼───┼×2───┼───┘数据 / 控制信号阶段S → 写寻址0x80→ ACK → 寄存器0xE3→ ACK → 重复 S → 读寻址0x81→ ACK → 数据0x1A→ACK→0x5B→NACK→ P传输流程3. 时序步骤S起始SCL 高时SDA 高→低下降沿写寻址SCL 高时SDA 传 0x808 位从机回 ACK寄存器地址SCL 高时传 0xE3从机回 ACK重复 SSCL 高时SDA 高→低读寻址SCL 高时传 0x81从机回 ACK传数据SCL 高时从机传 0x1A高 8 位主机回 ACK再传 0x5B低 8 位主机回 NACKP终止SCL 高时SDA 低→高上升沿。答题区答题要求闭卷考试不能翻书、不能开电脑作答时间50分钟共10道题目。请保留第原题目答题区请备注好做题序号只能写在答题纸上拍照粘贴到文档里-答题区请保证照片清晰发送时请将文档命名更改为本人姓名_软件笔试题