嵌入式程序员 应该知道的0x10个基本问题

2023-11-18

文章目录



1、 用 预处理指令 #define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题)
 #define 	SECONDS_PER_YEAR 	(60 * 60 * 24 * 365)UL

2、 写一个标准宏 MIN ,这个宏输入两个参数,并返回较小的一个
#define 	MIN(A,B)	((A) <= (B) ? (A):(B))

3、 预处理器标识 #error 的目的是什么
#error : 停止编译 并显示 错误信息

4、 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环
 while(1){...}

do {...} while(1)

for(;;){...}

5、 用 变量 a 给出下面的定义
序号 定义 效果
1 int a 整型
2 int * a 指向整型数指针
3 int ** a 指向指针指针,它指向指针指向整型数
4 int a[10] 有10个整型数数组
5 int * a[10] 有10个指针数组,它的指针指向整型数
6 int (*a)[10] 指向有10个整型数数组指针
7 int (*a)(int) 指向函数指针,该函数有一个整型参数,并返回一个整型数
8 int (*a[10])(int) 有10个指针数组,该指针指向一个函数,该函数有一个整型参数 并返回一个整型数

6、static 的作用,请写出两个;
序号 作用
1 函数体static 变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值
2 模块内的static 全局变量可以被模块所有函数访问,但不能被模块外 其他函数访问
3 模块内的static 函数,只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它 的模块内

7、关键字const的作用;
序号 作用
1 只读
2 使用关键字const也许能产生更紧凑的代码
3 使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改

另外使用const定义变量:

序号 定义 效果
1 const int a a 是常 整型数
2 int const a a 是常 整型数(同上)
3 const int * a a 是 指向常 整型数指针const修饰int,所以是常 整型数
4 int * const a a 是 指向整型数常指针const修饰a,所以a常指针
5 const int * const a a 是 指向常 整型数常指针

8、volatile的作用;

定义为volatile的变量可能会被意想不到地改变,优化器在用到这个变量时必须重新读取这个变量的值,而不是保存在寄存器里的备份


volatile变量的例子:

序号 作用
1 并行设备的硬件寄存器(如状态寄存器)
2 一个中断服务子程序中会访问到的非自动变量
3 多线程应用中,被几个任务共享的变量

9、 嵌入式系统总是要用户对变量或寄存器,进行位操作
#define 	BIT3 	(0x01 << 3)

static int a;
void set_bit3()
{
	a |= BIT3; 			//置 1
}
void clear_bit3()
{
	a &= ~BIT3; 		//清 0
}

10、嵌入式系统经常具有要求程序员去访问某特定的内存位置,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66
int * ptr = NULL;
ptr = (int *) 0x67a9;
*ptr = 0xaa66;

11、中断的概念

当某个事件发生时,CPU 停止运行正在执行的程序,而转去执行处理该事件的程序,处理该事件后,返回原程序继续执行下去的过程;
ISR中断服务程序Interrupt Service Routines

序号 作用
1 ISR不能返回值
2 ISR不能传递参数
3 ISR应该是短而有效率的,在ISR中做浮点运算是不明智的
4 printf()经常有重入和性能上的问题,所以不能在中断处理函数里调用printf()

12、代码输出结果;
void foo(void)
{
	unsigned int a = 6;
	int b = -20;
	(a + b > 6) ? puts(" > 6 ") : puts(" <= 6 ");
}

表达式 中存在 有符号类型无符号类型 时,所有的 操作数 都自动转换为 无符号类型,因此 -20 变成了一个非常大的正整数,该表达式计算出的结果 大于6,答案是输出 > 6

13、 评价下面的代码片断:
unsigned int zero = 0;
unsigned int comp_zero = 0xFFFF; 		//0 的反码(错误结果)

对于一个int不是16位的处理器来说,上面的代码是不正确的

正确结果编写如下:

unsigned int comp_zero = ~0;				//0 的反码(正确结果)(complement 反码)

14、 动态内存分配;
int * p = NULL;
p = (int *) malloc(sizeof(int) * 128); 	//内存申请
free(p); 								//内存释放

15、typedef语句用于给基本数据类型和导出数据类型定义一个新的名字
#define 	dPS 			struct s *
typedef 	struct s * 		tPS;
dPS p1 , p2; 						//错误定义,实际结果是 struct s * p1, p2;
tPS p3 , p4; 						//正确定义了两个指针

16、分析代码
int a = 5, b = 7, c;
c = a +++ b;

上面的代码被处理成:c = a++ + b;代码执行后 a = 6, b = 7, c = 12

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式程序员 应该知道的0x10个基本问题 的相关文章

  • Unity Shader入门精要学习——透明效果

    透明效果 1 实现透明效果的两种方法 透明度测试 Alpha Test 要么完全透明 要么完全不透明 实现简单 实质上是一种剔除机制 通过将不满足条件 通常使用小于某个阈值来判定 一般使用clip方法 的片元舍弃的方法来达到完全透明效果 这
  • arcgis中制作出行od图_ArcGIS中的OD分析简介

    ArcGIS中的OD分析主要用于模拟真实情况 进行快捷高效 个性化的出行分析 主要有两种实现方式 本文仅有文字教程 操作视频也许会有的 有了我可怎么通知有需要的人呢关注我B站 啊哈哈哈 1st XY转线 直线段OD 简单地将OD两点连接起来
  • 06. 计数原理

    6 计数原理 6 1 分类加法计数原理与分步乘法计数原理 分类加法计数原理定义 完成一件事 有 n n n 类办法 在第1类办法中有 m 1 m 1
  • 揭秘闲鱼赚钱项目的高端玩法

    一个行业项目存在越久 它被挖掘出来的东西也就越多 自媒体 电商 网赚项目有许许多多 但真正赚到钱的却没几个人 究其原因还是项目操作门槛的问题 项目的操作门槛越低 竞争也就越激烈 要是人人都可以轻松操作 能够赚得到的利润就更加的少 最后真正赚
  • python 数组操作中的 “:” “:: ” “, ” python 中的 [:-1] 和 [::-1] [-1:-2:-1] [

    使用python版本3 7 首先先了解下python3 7中的下标 python下标有两套 一套是正的 一套是负的 引入负坐标的意义应该是方便将数组中的数据从右往左访问 a python 中的python 的下标描述如下 组 p y t h
  • 2019ICPC上海Spanning Tree Removal构造题

    刚打完2021杭电多校6 有个构造 当时没有做 回头看了一波巨佬的博客学了一手 在这里记录一下 题目链接 链接 https ac nowcoder com acm contest 4370 D 来源 牛客网 spj 题目描述 Bob has
  • SpringBoot项目多数据源的数据库连接池的启动

    Maven部分配置
  • 03-信息收集

    信息搜集 全面了解系统 什么是信息收集 信息收集是指通过各种方式获取所需要的信息 信息收集是信息得以利用的第一步 也是关键的一步 信息收集工作的好坏 会影响整个渗透测试流程的进行 收集的信息越多后期可进行测试的目标就越多 信息收集包含资产收
  • python中items的作用_什么是python items函数?怎么使用它?

    这篇文章我们来学习一下关于python字典之中的python items函数的相关知识 items函数是什么意思 这个函数有什么作用都将会在接下来的文章之中得到解答 描述 Python 字典 Dictionary items 函数以列表返回
  • vue3 watch 监听多值以及深度监听用法

    1 监听单个值 引入 import watch from vue import useRouter from vue router export default setup const route useRouter 获取当前路由地址 wa
  • linux kernel file_open

    内核空间与用户空间 在vfs read和vfs write函数中 其参数buf指向的用户空间的内存地址 如果我们直接使用内核空间的指针 则会返回 EFALUT 这是因为使用的缓冲区超过了用户空间的地址范围 一般系统调用会要求你使用的缓冲区不
  • Qt VTK ITK安装与测试(三)ITK的安装与测试

    ITK的安装与测试 安装简介 本部分讲述使用cmake加VS2010编译 安装ITK库 基本步骤和VTK安装时相同 而后测试VTK与ITK的联合开发 VTK安装步骤 1 资源下载 资源下载网址 http www itk org ITK re
  • 【笔记】python中的for循环(遍历列表)、for循环中的一些缩进问题

    文章目录 一 for循环 遍历列表 在for循环中执行更多的操作 二 for循环中的一些缩进问题 一 for循环 遍历列表 我们经常需要遍历列表的所有元素 对每个元素执行相同的操作 这种情况下 我们就需要使用for循环 下面我们举几个栗子来
  • 专业CPU信息检测工具:CPU-Z

    今天小编为大家测试了一款轻量级的CPU处理器的测试工具 可以查看CPU的详细信息 以供各位同学们学习 一 简单介绍 CPU Z是一款非常流行的CPU检测软件 被广大用户所熟知 它是目前最受欢迎的CPU检测软件之一 除了Intel和AMD自带
  • SQLi-LABS Less-29到Less-31

    Less 29题目 Less 29的题目提到了WAF 看题目的意思应该是一个保护网站的东西 百度了一下 WAF就是Web Application Firewall 主要功能是拦截入侵尝试 比如SQL Injection XSS 路径遍历 窃
  • Java中insert()方法的使用

    insert 函数表示在字符串中插入字符串 StringBuffer insert int index String str 在Java中最常用instert方法的是这两个类型StringBuffer和StringBuilder 首先需要先
  • elementui的文件上传功能-.上传文件-带参数-手动

    elementui的文件上传功能 上传文件 带参数 手动
  • JS函数(二)基础 return 返回值

    创建函数 function 函数名 形参变量列表 函数体 return 返回值 return 1 什么是 返回 return语句将终止当前函数并返回当前函数的值 2 为什么要用 我们先来看一组代码
  • matlab矩阵(一)--如何控制矩阵中小数点的位数

    format 设置输出格式对浮点性变量 缺省为format short format并不影响matlab如何计算和存储变量的值 对浮点型变量的计算 即单精度或双精度 按合适的浮点精度进行 而不论变量是如何显示的 对整型变量采用整型数据 整型

随机推荐

  • 汤姆·克鲁斯 - 电影全集

    1 熄灯号 Taps 1981 导演 哈诺德 贝克编剧 Darryl Ponicsan Devery Freeman James Lineberger主演 乔治 C 斯科特 蒂莫西 赫顿 罗尼 考克斯 西恩 潘 汤姆 克鲁斯 伊万 汉德勒
  • HLS图像处理系列——在ZEDBoard搭建DDR图像处理通路

    ZYNQ芯片内包含一个丰富特性的基于双核ARM Cortex A9的处理子系统 Processing System PS 和Xilinx 28nm可编程逻辑 Programmable Logic PL PS除了核心外还包括片上存储器 外部存
  • 端口扫描程序nmap使用手册

    摘要 nmap是一个网络探测和安全扫描程序 系统管理者和个人可以使用这个软件扫描大型的网络 获取那台主机正在运行以及提供什么服务等信息 nmap支持很多扫描技术 例如 UDP TCP connect TCP SYN 半开扫描 ftp代理 b
  • [原创]Discuz!NT1.1高亮代码插件1.5稳定版!

    Discuz NT 1 1高亮代码插件FOR NET2 0 作者 winson 版本 1 5稳定版 支持网站 http bbs szblogs com 功能 为论坛增加高亮代码显示 类似cnblogs的形式 一 1 5版修复的问题 之前发布
  • cgi和fastcgi获取所有环境变量(C语言)

    参考 http blog chinaunix net uid 620765 id 2084386 html 还记得C语言main函数的完整声明吗 int main int argc char argv char envp 这个就是c语言中m
  • c语言解惑 ----读书笔记

    c语言解惑 前言 左值和右值 首地址 没有初始化指针和空指针 指针的初始化 小段存储和大端存储 数组 函数 文件结构 多文件结构 多文件中的函数设计 头文件 前言 面试过程中 发现自己确实对于c和c 实现的原理了解得不够深入 因此借书以解惑
  • IE和FF下查看HTTP头文件信息的插件

    通过这2个插件可以获得服务器返回的页面header信息 对于解析web服务器的工作情况非常有帮助 如查看gzip压缩是否成功及html文件的大小 iehttpheaders下载地址 http www blunck se iehttphead
  • 论文阅读Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

    论文信息 题目 Sentence Embeddings using Siamese BERT Networks 使用孪生BERT网络结构的句子嵌入 作者 Nils Reimers Iryna Gurevych 论文水平 EMNLP 2019
  • 工程师必知的代码重构指南

    作者 CATE LAWRENCE 译者 冬雨 策划 蔡芳芳 本指南将带你了解进行代码重构的好处 可能遇到的挑战 可以采用的工具和最佳实践 以及重构和技术债务之间的区别 我们都在寻找清理代码 降低复杂性和改进功能的方法 重构就是其中之一 本指
  • mongoDB操作命令大全,掌握最常用的命令

    目录 添加操作 查询操作 复合主键 逻辑操作符匹配 文档游标 文档投影 更新操作 删除操作 添加操作 db 集合 insertOne
  • 面试题二:谈一谈对JavaScript中for in与for of的理解

    for in for in 语句以任意顺序迭代一个对象的除Symbol以外的可枚举属性 包括继承的可枚举属性 在没有深度了解过for in的作用前 我只停留在它能够遍历对象键和数组下标的的层面上 那现在就来探究什么是一个对象中的Symbol
  • 配置centos虚拟机以及虚拟机联网问题

    文章目录 在VMware中创建虚拟机 创建虚拟机 安装centons 7 难点 网络配置 在VMware中创建虚拟机 创建虚拟机 安装centons 7 本文以centos 7 64位为例 各位需要下载centos 7的iso文件 下载地址
  • [网络]公共网络安全漏洞库:CVE/CNCVE

    1 前言 以网络安全行业中最大的 影响范围最广的CVE为例 CVE 的英文全称是 Common Vulnerabilities Exposures 通用漏洞披露 CVE就好像是一个字典表 为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一
  • 【数据库】redis数据持久化

    目录 数据持久化 一 RDB 1 什么是RDB 2 持久化流程 3 相关配置 案例演示 4 备份和恢复 1 备份 2 恢复 3 优势 4 劣势 二 AOF 1 什么是AOF 2 持久化流程 3 使用AOF 1 开启AOF 2 使用演示 3
  • SDAutoLayout的使用方法

    Cell高度自适应 label文字自适应 1 gt gt 设置cell高度自适应 cell 布局设置好之后调用此方法就可以实现高度自适应 注意 如果用高度自适应则不要再以cell的底边为参照去布局其子view cell setupAutoH
  • IC封装——从基本概念到TSV

    一 IC封装 在之前文章中有大致提过封装 这里展开讲讲 芯片生产流程 沧海一升的博客 CSDN博客每个半导体产品的制造都需要数百个工艺 泛林集团将整个制造过程分为八个步骤 晶圆加工 氧化 光刻 刻蚀 薄膜沉积 互连 测试 封装 芯片生产流程
  • 【Unix 网络编程】TCP状态转换图详解

    在前面 已经介绍了TCP协议的三路握手和四次挥手 如下图所示 TCP通信过程包括三个步骤 建立TCP连接通道 三次握手 数据传输 断开TCP连接通道 四次挥手 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程 先看TC
  • 实现3D照片墙效果

  • 如何与老板谈加薪

    工作时间不短了 自己感觉业绩也不少了 可是老板似乎总也视而不见 发到手的薪水还只是那么点儿 于是乎 总有些愤愤不平的 心里难免就打起了小九九 觉得老板太抠 觉得自己遭遇太不公 这时候 就该跟老板谈谈加薪的事情啦 如果不谈 也许就该考虑是不是
  • 嵌入式程序员 应该知道的0x10个基本问题

    文章目录 1 用 预处理指令 define 声明一个常数 用以表明 1 年中有多少秒 忽略闰年问题 2 写一个标准宏 MIN 这个宏输入两个参数 并返回较小的一个 3 预处理器标识 error 的目的是什么 4 嵌入式系统中经常要用到无限循