嵌入式面试题1

本文涵盖了嵌入式系统面试中的多个问题,包括预处理指令交换参数、浮点数比较、条件语句优化、位操作、Linux权限设置、内存占用、map文件内容、数据传输速率计算、C语言标准库函数、嵌入式芯片STM32F407ZGT6的特性和资源,以及解决项目中遇到的技术问题和思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、用预处理指令交换两个参数的值

#define SWAP(a,b) { int c=a;a=b;b=c}

2、写出floatx与“零值”比较的if语句

if(x<=0.000001 && x>=-0.000001)

float型变量和“零值”比较的方法:
 
const float EPSINON = 0.000001;
 
if ((x >= - EPSINON) && (x <=EPSINON))
 
浮点型变量并不精确,其中EPSINON是允许的误差(即精度),所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则是错误的。
 EPSILON指的是浮点数可表示的最小值
因为1.0在计算机中可能存为0.999999或1.00001等,很难恰好是1.0

3、为什么说if(0==x)比if(x==0)好?

为了更好的发现因为疏忽将if(x==0)错写成if(x=0)导致的错误,因为将常量写在前,当你少写一个=时,if(0=x)程序就会报错,从而提醒你,而写成if(x=0)程序并不会报错而是当成赋值语句。

4、将地址0x8000中存放的整形变量,清除bit1。

设地址0x8000 存放的整形变量为a,清除bit1,则就是置bit1为0,则需要让 a &= 111 1111 1111 1101,而1111 1111 1111 1101 可通过(0x01<<1)再取反得到。
因此:a &=~(0x01<<1) 

 5、li

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值