Linux下C语言嵌入式
看你的风
这个作者很懒,什么都没留下…
展开
-
嵌入式C语言面试题库
嵌入式开发—C语言面试题用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长转载 2020-10-03 23:13:13 · 15693 阅读 · 1 评论 -
Linux下C语言嵌入式笔记(九)--面试解析
C语言1、编写统计一个数二进制表示中有多少个1的函数int count_bit1(int m){int count = 0;while(m){m = m & (m-1);//表示将m表示的二进制数的最后一个为1的置0,1111需要四次才能变为0000count++;}return count;}2、编写一个函数判断一个数是否是2的N次方int is_number(int num){if( m & (m - 1) == 0)// 0100 & 0011|原创 2020-09-27 22:49:35 · 2356 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(八)--面试解析
ARM部分1、FIQ比IRQ快的原因:A、FIQ模式的R8–R14寄存器是独有的,FIQ处理程序可以不必执行保存和恢复中断现场的指令。B、FIQ可以将ISR直接放在FIQ后面的地址空间,不需要跳转。2、中断与异常有何区别异常在处理的时候必须考虑与处理器的时钟同步,实际上异常也称为同步中断,在处理器执行到因编译错误而导致的错误指令时,或者在执行期间出现特殊错误,必须靠内核处理的时候,处理器就会产生一个异常;所谓中断是指外部硬件产生的一个电信号从CPU的中断引脚进入,打断CPU的运行。所谓异常是指软件原创 2020-09-27 20:26:27 · 282 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(二)
数据类型1、基本数据类型数据类型是创建变量的模型。变量名是连续存储空间的别名,程序中使用变量命名存储空间,通过变量可以使用存储空间。变量所占的内存大小取决于创建变量的数据类型。2、有符号和无符号有符号数中数据类型的最高位用于标识数据的符号,最高位为1表示为负数,最高位为0表示为正数。计算机中有符号数通常使用补码表示,正数的补码为正数本身,负数的补码为负数的绝对值的各位取反后加1。计算机中无符号数通常使用原码表示,无符号数默认为正数,没有符号位。对于无符号数来说,MAX_VALUE + 1等于MI原创 2020-09-27 17:11:55 · 266 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(七)
单链表简介1、单链表的结构单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以节点来表示的,每个节点由两部分构成:一个是数据域,存储数据值,另一个是指针域,存储指向下一个节点的指针。2、单链表的节点单链表节点的数据结构如下:typedef struct data{unsigned int id;//学生身份IDchar name[LENGTH];//学生姓名char subject[LENGTH];//科目unsigned int score原创 2020-09-27 17:01:10 · 110 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(六)
存储类型C语言中,每个变量和函数都有两个属性:数据类型和数据的存储类型。变量的存储类型是指存储变量值的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值将保持多久。计算机中有三个地方可以用于存储变量:普通内存,运行时堆和栈,硬件寄存器。变量的存储类型取决于声明变量的位置。C语言存储类别说明符:1、静态变量在代码块之外声明的变量存储于静态内存中,不属于堆和栈的内存,这类变量称为静态(static)变量。静态变量在程序运行之前创建,是在将可执行文件加载到内存的时候创建,其在程序的整个执行期原创 2020-09-27 15:02:24 · 399 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(五)
内存字节对齐计算机中内存空间都是按照字节划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但是在程序实际编译过程中,编译器会对数据类型在编译过程中进行优化对齐,编译器会将各种类型数据按照一定的规则在空间上排列,而不是顺序的排放,这就是内存字节对齐。内存字节对齐原因不同硬件平台对存储空间的处理是不同的。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如某些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐。其他平台可能没有这种情况,但是最常原创 2020-09-26 23:15:57 · 197 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(四)
字符串声明声明字符串的方式有三种:字面量、字符数组、字符指针。字符串字面量是用双引号引起来的字符序列,常用来进行初始化,位于字符串字面量池中,字符字面量是用单引号引起来的字符。字符串字面量池是程序分配的一块内存区域,用来保存组成字符串的字符序列。多次用到一个字符串字面量时,字符串字面量池中通常只保存一份副本,一般来说字符串字面量分配在只读内存中,是不可变的,但是当把编译器有关字面量池的选项关闭时,字符串字面量可能生成多个副本,每个副本拥有自己的地址。GCC编译器中字符串字面量是可以改变的,为了将字符原创 2020-09-26 20:58:06 · 87 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(三)
数组的解读数组的定义:int a[10] = {0,1,2,3,4,5};a[0]:数组的第一个元素,首元素(做左值时表示第0个元素的内存空间)&a:数组的地址,是常量,不能做左值,类型等同int (*)[10](数组指针)。&a[0]:数组第0个元素的地址,与数组名a等价a:a是数组名,不能做左值,做右值时表示数组首元素的地址,与&a[0]相同。数组的地址与数组首元素的地址不是一个概念。数组名可以看作const指针,但数组名作为sizeof操作符的参数和&运算原创 2020-09-26 20:09:57 · 150 阅读 · 0 评论 -
Linux下C语言嵌入式笔记(一)
*基本位操作符:与、或、异或、非(取反)、左移、右移位运算只能对整数;左移运算符<<的移动位数>=类型长度的时候,在GCC环境下编译会有警告,实际移动位数为:左移位数%8。如int i = 1; i = i << 33; ===>i = 2 //i 左移33位,超过类型长度,则移动 33%8 = 1位左移时总是移位和补零(逻辑左移),右移时无符号数是移位和补零,有符号数大多数是移位和补最左边的位;未运算符的运算优先级较低;位操作符的使用:位与运算&原创 2020-09-26 15:00:50 · 288 阅读 · 0 评论