嵌入式工程师笔试题
- 格式:doc
- 大小:23.00 KB
- 文档页数:8
嵌入式笔试题及答案一、单选题(每题2分,共20分)1. 嵌入式系统通常指的是:A. 通用计算机系统B. 专用计算机系统C. 便携式计算机系统D. 网络计算机系统答案:B2. 下列哪个不是嵌入式系统的特点:A. 实时性B. 资源受限C. 可扩展性D. 专用性答案:C3. 在嵌入式系统中,通常使用哪种类型的处理器:A. 通用处理器B. 微处理器C. 数字信号处理器D. 图形处理器答案:B4. 嵌入式系统的开发流程不包括以下哪一项:A. 需求分析B. 系统设计C. 硬件选择D. 软件编程答案:C5. 以下哪个不是嵌入式操作系统的功能:A. 任务调度B. 内存管理C. 文件系统D. 网络通信答案:D6. 在嵌入式系统中,中断服务程序的作用是:A. 执行系统初始化B. 处理系统异常C. 响应外部事件D. 执行系统监控答案:C7. 以下哪个不是嵌入式系统的硬件组成部分:A. 微处理器B. 存储器C. 输入/输出设备D. 操作系统答案:D8. 嵌入式系统中的外设驱动程序的主要功能是:A. 控制外设的电源B. 实现系统与外设的通信C. 管理外设的内存D. 处理外设的错误答案:B9. 在嵌入式系统中,以下哪个不是常用的编程语言:A. C语言B. C++C. JavaD. Assembly答案:C10. 以下哪个不是嵌入式系统的开发工具:A. 编译器B. 调试器C. 仿真器D. 网络浏览器答案:D二、多选题(每题3分,共15分)11. 嵌入式系统的开发需要考虑以下哪些因素:A. 系统性能B. 成本控制C. 功耗管理D. 软件兼容性答案:A, B, C12. 嵌入式系统的软件包括以下哪些部分:A. 引导程序B. 操作系统C. 应用程序D. 驱动程序答案:A, B, C, D13. 嵌入式系统的硬件设计包括以下哪些内容:A. 微处理器选择B. 存储器设计C. 外设接口D. 电源管理答案:A, B, C, D14. 嵌入式系统的调试方法包括:A. 单元测试B. 集成测试C. 系统测试D. 性能测试答案:A, B, C, D15. 嵌入式系统的实时性要求包括:A. 确定性B. 可预测性C. 可重复性D. 可扩展性答案:A, B三、判断题(每题1分,共10分)16. 嵌入式系统总是需要操作系统的支持。
1. 请解释什么是嵌入式系统?
2. 请列举几种常见的嵌入式操作系统,并简要介绍它们的特点。
3. 请解释实时操作系统(RTOS)的概念,并说明它在嵌入式系统中的重要性。
4. 请解释中断和轮询的区别,以及它们在嵌入式系统中的应用场景。
5. 请解释什么是中断处理程序(ISR),并简要描述其执行过程。
6. 请解释什么是任务(Task)和事件(Event)驱动编程,并简要描述它们在嵌入式系统中的应用。
7. 请解释什么是嵌入式系统的低功耗设计,并列举几种常见的低功耗技术。
8. 请解释什么是嵌入式系统的硬件抽象层(HAL),并简要描述其作用。
9. 请解释什么是嵌入式系统的软件组件化设计,并简要描述其优点。
10. 请解释什么是嵌入式系统的调试方法,并列举几种常见的调试工具。
11. 请解释什么是嵌入式系统的故障诊断和容错设计,并简要描述其重要性。
12. 请解释什么是嵌入式系统的系统集成测试,并简要描述其步骤。
13. 请解释什么是嵌入式系统的软件开发流程,并简要描述其主要阶段。
14. 请解释什么是嵌入式系统的硬件平台,并简要描述其组成部分。
15. 请解释什么是嵌入式系统的软件开发环境,并简要描述其特点。
16. 请解释什么是嵌入式系统的软件版本控制,并简要描述其重要性。
17. 请解释什么是嵌入式系统的软件质量保证,并简要描述其方法。
18. 请解释什么是嵌入式系统的软件性能优化,并简要描述其方法。
19. 请解释什么是嵌入式系统的软件安全设计,并简要描述其重要性。
20. 请解释什么是嵌入式系统的软件可维护性设计,并简要描述其方法。
笔试题1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。
2:为了向二进制文件尾部增加数据,打开文件的方式应采用A.″ab″B.″rb+″C.″wb″D.″wb+″参考答案:D3:下述程序执行后的输出结果是#includemain(){int x=’f';printf(“%c\n”,’a’+(x-‘a’+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级高的是A.!B.%C.>>D.= =参考答案:A5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*aB.a [ 0 ]C.aD.a++参考答案:D6:执行语句“ k=7>>1; ”后,变量 k 的当前值是A.15B.31C.3D.1参考答案:C7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型A.voidB.charC.floatD.int参考答案:D8:若main()函数带参数,参数个数多是A.0B.1C.2D.3参考答案:C 只知道有定义形式main(int argc,char* argv[])) 9:若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出结果是int a=13,b=94;printf(″%d\n″,MOD(b,a+4));A.5B.7C.9D.11参考答案:B10:下列各个错误中,哪一个不属于编译错误A.改变 x 原值 3 为 5 ,写作“ x==5 ;”B.花括号不配对C.复合语句中的后一条语句后未加分号D.变量有引用、无定义11:下列程序段运行后, x 的值是( )a=1;b=2;x=0;if(!( — a))x — ;if(!b)x=7;else ++x;A.0B.3C.6D.7参考答案:A12:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:下列转义字符中错误的是A.′\000′B.′\14′C.′\x111′D.′\2′参考答案:C error C2022: ‘273’ : too big for character15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算16:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B17:表达式strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个A.非零整数B.浮点数C.0D.字符参考答案: A18:设struct{ short a;char b;float c;}cs;则sizeof(cs)的值是A.4B.5C.6D.7参考答案: D 字节对齐的话应该是819:若变量已正确定义,表达式( j=3 , j++ )的值是A.3B.4C.5D.0参考答案:A20:C 语言中运算对象必须是整型的运算符是A.%B./C.!参考答案:A21:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?22:01 #include0203 void main()0405 { int c;0607 while ((c=getchar())!= ′\ n ′ )0809 switch(c - ′ 2 ′ )1011 { case 0:1213 case 1:putchar(c+4);break;1415 case 2:putchar(c+4);break;1617 case 3:putchar(c+3);break;1819 default:putchar(c+2);break;2021 }2223 printf( ″\ n ″ );2425 }运行时输入: 2473 ,输出结果:参考答案:6897 VC++6.0测试过23:写一语句实现x是否为2的若干次幂的判断。
嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串1、c51单片机的串口异步通信和同步通信的区别,说说他们的优缺点。
2、C51单片机的数据总线和地址总线是如何复用的,说明原理。
3、C51单片机的绝对寻址范围是多少k?4、说明下面的寻址方式(1)MOV A , #30H (2)MOV A,@R0(3)ADD A , R4 (4)MOV A+@DPTR 5、写出下面分别是什么指针?(1)int *a[10]; (2)int (*a)[10];(3)int (*P)(int) ; (4)int (*a[10])(int);6、void swap(int a,int b){int temp;temp = a;a=b;b=temp;}main(void){int x="3",y=4;swap(x,y);}问上面程序执行完后x= ?,y=?7、typedef struct test{int i;short s;char c;union{int a;short b;}}example ;int y ;y = sizeof(example);请问在TC环境下,y=?8、编程实现数组的逆置,例如,“hello,world!”逆置后为“!dlrow,olleh”。
9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。
10、冯诺依曼结构的计算机由哪几部分组成?11、说说程序,进程,线程的区别。
12、说说你怎样理解程序= 数据+ 结构+ 算法13、根据函数原型编程实现一个数组,按从大到小的冒泡排序。
void tibbule(int a[],int n);//a[]为数组,n为数组长度14、OSI有哪几层?tcp/ip包括哪几层?15、编程实现一个双链表的节点插入和删除。
选择题
在嵌入式系统开发中,以下哪种编程语言通常不用于底层驱动开发?
A. C
B. C++
C. Python(正确答案)
D. 汇编语言
嵌入式系统中,中断服务程序(ISR)的主要特点是?
A. 执行时间长
B. 可被其他中断打断
C. 响应速度快(正确答案)
D. 占用大量内存
下列哪项不是嵌入式处理器选择时需要考虑的因素?
A. 处理速度
B. 功耗
C. 外形尺寸(正确答案)
D. 成本
在嵌入式系统设计中,RTOS(实时操作系统)的主要作用是?
A. 提供图形用户界面
B. 管理硬件资源和任务调度(正确答案)
C. 实现网络通信功能
D. 处理数据输入输出
嵌入式系统中,DMA(直接内存访问)技术主要用于?
A. 加快CPU运算速度
B. 实现内存与外设之间的高速数据传输(正确答案)
C. 增加内存容量
D. 提高系统安全性
下列哪种接口通常不用于嵌入式系统中的数据传输?
A. UART
B. SPI
C. HDMI(正确答案,通常用于高清视频输出)
D. I2C
在嵌入式软件开发中,以下哪种调试方法不是常用的?
A. 使用JTAG进行硬件调试
B. 通过串口输出调试信息
C. 利用仿真器进行软件模拟
D. 直接在最终产品上进行测试(正确答案)
下列哪项不是嵌入式系统设计中需要考虑的实时性指标?
A. 响应时间
B. 吞吐量
C. 系统复杂度(正确答案)
D. 任务执行周期。
嵌入式软件工程师经典笔试题嵌入式软件工程师经典笔试题为关怀大家稳固嵌入式工程是根底学问,yjbys 我为大家整理最新嵌入式工程师考试题如下:1、将一个链表逆序LinkList *reverse(LinkList *head){LinkList *p1,*p2 = NULL,*p3 = NULL;if(head == NULL || head-next == NULL)return head;p1 = head-next;while(p1!=NULL){ p3 = p1-next;p1-next = p2;p2 = p1;p1 = p3;}head-next = p2;// head = p2;return head;}2、计算一个字节里(byte)里面有多少bit被置1 #includeint comb(const int c){int count = 0;int i = 0;int cc = c; while(i++8) {if((cc1)==1) {count++;}cc = cc1;}return count; }int main(){ const int c = 0xcf;printf(%d\n,comb(c));return 1;}3、在一个字符串中找到可能的`最长的子字符串#include#include#includechar *commanstring(char shortstring[],char longstring[]) {int i,j;char *substring = malloc(256);if(strstr(longstring,shortstring)!=NULL)return shortstring;for(i=strlen(shortstring)-1;i0;i--){for(j=0;j=strlen(shortstring)-i;j++) {memcpy(substring,shortstring[j],i);substring[i]=\0;if(strstr(longstring,substring)!=NULL) return substring;}}return NULL;}void main(void){ char *str1 = aocdfe;char *str2 = pmcdfa;char *comman = NULL;if(strlen(str1)strlen(str2))comman= commanstring(str2,str1);elsecomman = commanstring(str1,str2);printf(the longest comman string is:%s\n,comman); }4、字符串转换为整数#include#includevoid reverse(char s[]){ //字符串反转int c, i=0, j;for(j=strlen(s)-1;i{ c=s[i];s[i]=s[j];s[j]=c;i++;}}void IntegerToString(char s[],int n){ int i=0,sign;if((sign=n)0)//假设是负数,先转成正数n=-n;do //从个位开头变成字符,直到最高位,最终应当反转 { s[i++]=n%10+0; }while((n=n/10)0);//假设是负数,补上负号if(sign0)s[i++]=-;s[i]=\0;//字符串完毕reverse(s);}void main(){ int m;char c[100];m =215;IntegerToString(c,m);printf(integer = %d string = %s\n, m, c); }5、整数转换为字符串#include#includeint Atoi(char str[]){int i;int weight = 1; // 权重int rtn = 0; // 用作返回for(i = strlen(str) - 1; i = 0; i--) {rtn += (str[i] - 0)* weight; //weight *= 10; // 增重}return rtn; }void main(){char str[32];printf(Input a string :); gets(str);printf(%d\n, Atoi(str)); }6、将一个字符串逆序#include#includechar *strconv(char *p){int length = strlen(p);char *ptr = p;char *ptr_1 = p + length -1; while(ptr ptr_1){char c = *ptr;*ptr = *ptr_1;*ptr_1 = c;++ptr;--ptr_1;}return p;}int main(){ char str[]=abcdef1234; char *p;p = strconv(str);printf(%s,p);return 1;}。
c++嵌入式软件工程师笔试题1. C++是什么?2. C++中`this`指针的含义是什么?3. 什么是异常处理?如何在C++中实现?4. 什么是多态?在C++中如何实现?5. 什么是虚函数?6. 什么是构造函数?它在C++中的作用是什么?7. C++中的析构函数有何用途?8. 请描述一下内存分区,并说明堆和栈的区别。
9. 如何定义类的成员函数为静态的?10. 请简述一下拷贝构造函数。
11. `const`关键字在C++中的用途有哪些?12. 在C++中,`inline`关键字有何作用?13. 请描述C++中的RAII技术。
14. `new`和`malloc`在C++中的主要区别是什么?15. 请描述C++中的三种基本控制结构。
16. `switch`语句在C++中允许的变量类型有哪些?17. 如何声明一个常量整型数组?18. `sizeof`运算符在C++中的作用是什么?19. 什么是全局变量和局部变量?它们有什么区别?20. 什么是函数的重载?21. 什么是函数的默认参数?22. C++中的友元函数是什么?23. 请描述一下C++中的内联函数。
24. 什么是STL(标准模板库)?25. `vector`、`list`、`deque`的区别是什么?26. C++中的STL容器如何进行排序?27. 什么是STL中的迭代器?它与指针有何相似之处?28. `auto`关键字在C++中的用途是什么?29. 什么是lambda表达式?如何使用它?30. C++中的STL算法有哪些常见的用途?31. 什么是多线程编程?在C++中如何实现多线程?32. 请描述一下C++中的线程安全问题。
33. C++中的智能指针是什么?它与原始指针有何不同?34. `nullptr`与`NULL`的区别是什么?35. 请解释C++中的深拷贝和浅拷贝。
36. 如何使用C++中的IO流进行文件读写操作?37. 什么是异常安全代码?如何在C++中编写异常安全代码?38. `final`关键字在C++中的含义是什么?它与`override`关键字有何联系?39. C++中的STL容器如何进行查找操作?40. 请描述一下C++中的STL容器的容量和大小。
嵌入式笔试题及答案一、选择题(每题2分,共40分)1. 下面哪个不是嵌入式系统的特点?A. 实时性强B. 资源受限C. 包含网络通信功能D. 电源自主供电答案:C2. 嵌入式系统的一个主要应用领域是:A. 医疗设备B. 大型工业控制C. 智能手机D. 电子游戏答案:A3. 在嵌入式系统开发中,通常使用哪种编程语言?A. PythonB. JavaC. C/C++D. JavaScript答案:C4. 嵌入式系统的主要硬件组成部分是:A. 处理器、内存、外设B. 显示屏、键盘、鼠标C. 摄像头、扬声器、麦克风D. 电源、机箱、风扇答案:A5. 在嵌入式系统开发中,以下哪个是常用的实时操作系统?A. WindowsB. LinuxC. AndroidD. RTOS答案:D...二、编程题(共60分)请使用C语言完成以下题目:1. 编写一个函数,判断一个数是否为素数。
函数原型为: int isPrime(int n);答案:```c#include <stdio.h>int isPrime(int n) {int i;for (i = 2; i <= n/2; i++) {if (n % i == 0) {return 0; // 不是素数}}return 1; // 是素数}int main() {int n;printf("请输入一个整数:");scanf("%d", &n);if (isPrime(n)) {printf("%d是素数\n", n);} else {printf("%d不是素数\n", n);}return 0;}```2. 编写一个函数,计算n的阶乘。
函数原型为: int factorial(int n);答案:```c#include <stdio.h>int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}}int main() {int n;printf("请输入一个整数:");scanf("%d", &n);printf("%d的阶乘为:%d\n", n, factorial(n));return 0;}```...三、简答题(每题10分,共30分)1. 简述嵌入式系统的优缺点。
嵌入式软件工程师笔试题一、题目描述某公司正在招聘一名嵌入式软件工程师,为了筛选合适的人选,决定进行一场笔试。
请根据以下要求完成以下三个问题:1. 设计一个嵌入式软件系统,要求对温度进行实时监测,并根据温度变化控制一个风扇的转速。
2. 编写一个C语言函数,实现对一个整型数组的排序功能。
3. 使用C语言编写一个简单的通信协议,实现两个设备之间的数据传输。
二、嵌入式软件系统设计在嵌入式软件系统设计方面,以下是一个简要的设计方案:1. 硬件配置:a. 主控芯片:选择一款适合的低功耗嵌入式处理器,如ARM Cortex-M系列。
b. 温度传感器:选择一款精度高、稳定性好的温度传感器,可通过I2C或SPI接口与主控芯片通信。
c. 风扇控制器:选择一款与主控芯片兼容的风扇控制器,可通过PWM信号控制风扇转速。
2. 软件设计:a. 主程序循环:主控芯片通过定时器中断实现周期性监测温度并控制风扇的转速。
b. 温度读取:通过I2C或SPI通信协议读取温度传感器的温度值。
c. 温度判断:根据温度值判断是否需要调整风扇转速。
d. 风扇控制:通过PWM信号控制风扇的转速,根据温度变化调整占空比。
三、整型数组排序函数实现以下是一个简单的C语言函数,实现对一个整型数组的排序功能:```cvoid arraySort(int arr[], int length) {int i, j, temp;for (i = 0; i < length - 1; i++) {for (j = 0; j < length - i - 1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}```四、简单通信协议设计以下是一个使用C语言编写的简单通信协议,实现两个设备之间的数据传输:```c// 发送端void sendData(uint8_t data) {// 将数据通过串口发送给接收端UART_send(data);}// 接收端void receiveData() {while (!UART_dataAvailable()) {} // 等待数据接收完成uint8_t data = UART_receive(); // 获取接收到的数据// 对接收到的数据进行处理// ...```根据上述设计方案和示例代码,嵌入式软件工程师可以完成相关开发任务,实现温度监测与风扇控制、数组排序功能以及设备间的简单数据传输。
嵌入式笔试题及答案一、选择题1. 在嵌入式系统中,以下哪个不是实时操作系统的特点?A. 多任务B. 可预测性C. 多用户D. 资源管理答案:C2. 以下哪个协议不是嵌入式系统中常用的通信协议?A. UARTB. I2CC. TCP/IPD. USB答案:C3. 在嵌入式系统中,以下哪个不是常用的存储设备?A. EEPROMB. SRAMC. ROMD. HDD答案:D二、填空题1. 嵌入式系统的______是指系统在规定的时间内完成对事件的处理的能力。
答案:实时性2. 在嵌入式系统中,______是一种常用的低功耗通信方式,适用于短距离通信。
答案:SPI3. 在嵌入式系统中,______是一种常用的非易失性存储器,断电后数据不会丢失。
答案:Flash三、简答题1. 简述嵌入式系统与通用计算机系统的主要区别。
答案:嵌入式系统与通用计算机系统的主要区别在于:嵌入式系统通常具有专用性,为特定任务设计,体积小,功耗低,成本敏感,并且往往需要实时响应;而通用计算机系统则功能更为全面,适用于多种任务,对实时性要求不高,体积和功耗相对较大。
2. 描述嵌入式系统中中断的概念及其作用。
答案:在嵌入式系统中,中断是指当某个外部或内部事件发生时,系统暂停当前任务,转而处理该事件的过程。
中断的作用是允许系统快速响应外部事件,提高系统的实时性和效率。
四、编程题1. 编写一个简单的C语言函数,实现对一个整数数组的排序。
```c#include <stdio.h>void sortArray(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);sortArray(arr, n);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```2. 编写一个嵌入式C语言程序,实现对一个LED灯的控制,使其每隔一秒闪烁一次。
1. C语言中,修饰符volatile含义是什么其应用场合有哪些
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存
储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则
编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了
的话,将出现不一致的现象。
2. 请问TCP/IP协议分为哪几层FTP协议在哪一层
ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层、数据链路层、网络层、传输
层、会话层、表示层、应用层
物理层:在物理媒体上传输原始的数据比特流。
数据链路层:将数据分成一个个数据帧,以数据帧为单位传输。有应有答,遇错重发。
网络层:将数据分成一定长度的分组,将分组穿过通信子网。
传输层:提供不具体网络的高效、经济、透明的端到端数据传输服务。
会话层:进程间的对话也称为会话,会话层管理不同主机上各进程间的对话。
表示层: 为应用层进程提供格式化的表示和转换数据服务。
应用层:提供应用程序访问OSI环境的手段。
应用层:TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP、DNS
表示层:
文本:ASCII,EBCDIC
图形:TIFF,JPEG,GIF,PICT
声音:MIDI,MPEG,QUICKTIME
会话层:NFS、SQL、RPC 、X-WINDOWS、ASP(APPTALK会话协议)、SCP
传输层:TCP、UDP、SPX
网络层:IP、IPX、ICMP、RIP、OSPF(Open Shortest Path First开放式最短路径优先)
数据链路层:SDLC、HDLC、PPP、STP(Spanning Tree Protocol)、帧中继
物理层:EIA/TIA RS-232、EIA/TIA RS-449、、RJ-45
3. 在网络应用中,函数htons,htonl,ntohs,ntohl的作用是什么
uint32_t htonl(uint32_t hostlong);C语言中static函数与普通函数的区别是什么
静态函数
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不
能被其他文件所用。
定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。
局部静态变量
在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
1)内存中的位置:静态存储区
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,
除非他被显示初始化)
3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之
结束。
全局静态变量
在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,
除非他被显示初始化)
3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文
件结尾。
好处:
定义全局静态变量的好处:
<1>不会被其他文件所访问,修改
<2>其他文件中可以使用相同名字的变量,不会发生冲突
5. 请实现内存复制函数void memcpy(void *dst const void *src,int size)
void *memcpy(void *dest, const void *src, unsigned int size)
{
if(dest==NULL || src==NULL)
{
return dest;
}
void *temp = dest;
while(size--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
return temp;
}
6、进程间通信的方式有
管道(pipe),流管道(s_pipe)和有名管道(FIFO)
信号(signal)
消息队列
共享内存
信号量
套接字(socket)
7、IPv4把所有的IP地址分为A、B、C、D、E五类。请写出B类地址和C类地址的范围和
掩码,D类地址的用途是什么
A类IP地址范围:到
B类IP地址范围:到
C类IP地址范围:到
D类IP地址范围:到
E类IP地址范围:到类地址用于多点播送
E类地址保留,仅作实验和开发用
全零(“0.0.0.0”)地址指任意网络。
全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
8、请简述在linux中多进程程序和多线程程序的区别。
9、写一个标准的宏MINX,这个宏输入两个参数并返回较小的一个
#define MIN(A, B) ((A)>(B) (B) : (A))
10、什么是MMU,MMU的作用
MMU是Memory Management Unit(内存管理单元)
1)虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序。为了使
用虚拟内存,操作系统通常要设置一个交换分区(通常是硬盘),通过将不活跃的内存中的
数据放入交换分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是通过虚拟地
址来实现的。
2)内存保护。根据需要对特定的内存区块的访问进行保护,通过这一功能,我们可以将特
定的内存块设置成只读、只写或是可同时读写
11、关键字volatile有什么含义,并给出几个应用场合。
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减
少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile 声明的变量的值的时
候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而
且读取的数据立刻被保存。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意
义;
12、“栈 stack”和“堆 heap”有什么区别,写两个函数分别在栈上和堆上分配内存,在堆
上分配内存应注意哪些问题
1.申请方式
stack:
由系统自动分配。 例如,声明在函数中一个局部变量
int b; 系统自动在栈中为b开辟空间
heap:
需要程序员自己申请,并指明大小,在c中malloc函数
p1 = (char *)malloc(10);
2.申请后系统的响应
栈:
只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
堆:
首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表
中删除,并将该结点的空间分配给程序.
3.申请大小的限制
栈:
栈顶的地址和栈的最大容量是系统预先规定好的,是一块连续的内存的区域,在WINDOWS
下,栈的大小是2M ,如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从
栈获得的空间较小。 (有限内存)
堆:
堆是向高地址扩展的数据结构,是不连续的内存区域。(自己分配)
void fun(void)
{
int a[10];
int *p = (int *)malloc(10*sizeof(int));
if(p == NULL)
{
return;
}
}
13、请指出下面程序的错误
unsigned char i = 10;
char b = 100;
char* p;
void f(void)
{
While(–-i>=0)
{
*(p++) = b;
}
}
p没有分配空间
i是无符号型,自减操作会引发死循环
14、TCP/IP通信建立的过程怎样,端口有什么作用
端口作用:(连接作用)就是让运输层的各种应用进程都能将其数据通过端口向下交付给运
输层,以及让运输层知道应当将其报文段的数据向上通过端口交付给应用层相应的进程