嵌入式C语言面试题(二)

来源:互联网 发布:软件开发公司排行榜 编辑:程序博客网 时间:2024/05/17 01:41
1 读程序段,回答问题
  1. int main(int argc,char *argv[])
  2. {
  3. int c=9,d=0;
  4. c=c++%5;
  5. d=c;
  6. printf("d=%d\n",d);
  7. return 0;
  8. }
复制代码
a) 写出程序输出
b) 在一个可移植的系统中这种表达式是否存在风险?why?
  1. #include "stdio.h"
  2. int a=0;
  3. int b;
  4. static char c;
  5. int main(int argc,char *argv[])
  6. {
  7. char d=4;
  8. static short e;
  9. a++;
  10. b=100;
  11. c=(char)++a;
  12. e=(++d)++;
  13. printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);
  14. return 0;
  15. }
复制代码
a) 写出程序输出
b) 编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg. stack,heap,data section,bsssection),最好用图形方式描述。

2中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准C支持中断,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。
  1. __interrupt double compute_area(double radius)
  2. {
  3. double area = PI * radius *radius;
  4. printf("nArea = %f", area);
  5. return area;
  6. }
复制代码
3 C/C++基础知识问题

a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。
b) C语言中static关键字的具体作用有哪些 ?
c) 请问下面三种变量声明有何区别?请给出具体含义
  1. int const *p;
  2. int* const p;
  3. int const* const p;
复制代码
4 嵌入式系统相关问题
a) 对于整形变量A=0x12345678,请画出在little endian及bigendian的方式下在内存中是如何存储的。
b) 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
c) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?

5设周期性任务P1,P2,P3的周期为T1,T2,T3分别为100,150,400;执行时间分别为20,40,100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。

6 优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。
a) 首先请解释优先级反转问题
b) 很多RTOS提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priorityceilings)用来解决优先级反转问题,请讨论这两种策略。


参考答案:

1 5
  存在风险,因为c=c++%5;这个表达式对c有两次修改,行为未定义,c的值不确定
  int a=0; // datasection
  int b;  // data section
  static char c; // BSS
  int main(int argc,char*argv[])
  {
    char d=4;       //stack
    static shorte;   // BSS
    a++;
    b=100;
    c=(char)++a;
    e=(++d)++;
    printf("a=%d, b=%d, c=%d, d=%d, e=%d",a,b,c,d,e);
    return 0;
  }
  a=2,b=100,c=2,d=6,e=5

2 a)ISR不能返回一个值;
  b)ISR不能传递参数;
  c)浮点一般都是不可重入的;
  d)printf函数有重入和性能上的问题。

3 a) 用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里
重新读取它的值,并不要随意针对它作优化。
建议使用volatile变量的场所:
(1) 并行设备的硬件寄存器
(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)
(3) 多线程应用中被几个任务共享的变量
  b)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
    在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数
访问。它是一个本地的全局变量。
    在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的
模块的本地范围内使用。
    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
  c) 一个指向常整型数的指针
    一个指向整型数的常指针
    一个指向常整型数的常指针
4

a) 0x12345678
little endian      big endian刚好反过来
  高地址--〉 0x12     低地址--〉0x12
          0x34             0x34
          0x56             0x56
  低地址--〉 0x78     高地址--〉0x78
b)参数<=4时候,通过R0~R3传递,>4的通过压栈方式传递
c)  异常:在产生时必须考虑与处理器的时钟同步,实践上,异常也称为同步中断。在处理器执行到由于编程失误而导致的错误指令时,或者在执行期间出现特殊情况(如缺页),必须靠内核处理的时候,处理器就会产生一个异常。
所谓中断应该是指外部硬件产生的一个电信号,从cpu的中断引脚进入,打断cpu当前的运行;
所谓异常,是指软件运行中发生了一些必须作出处理的事件,cpu自动产生一个陷入来打断当前运行,转入异常处理流程。
异步与同步的区别`
5

6高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象叫做优先级反转优先级继承策略(Priorityinheritance):继承现有被阻塞任务的最高优先级作为其优先级,任务退出临界区,恢复初始优先级。
  优先级天花板策略(Priorityceilings):控制访问临界资源的信号量的优先级天花板。
  优先级继承策略对任务执行流程的影响相对教小,因为只有当高优先级任务申请已被低优先级任务占有的临界资源
这一事实发生时,才抬升低优先级任务的优先级
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 水瓶座如果恨我们了该怎么办 不锈钢保温瓶不保温了怎么办 壁纸颜色选深了怎么办 客厅壁纸太暗了怎么办 别人说你衣服丑怎么办 高楼热水器风大熄火怎么办 1楼独立下水2楼怎么办 宜家家具不会装怎么办 服务行业遇到低素质客户怎么办 服务类没有进项票怎么办 教师对学生缺乏耐心怎么办 买了竹料烂尾楼怎么办 刚毕业想换工作怎么办 客厅灯变不了光怎么办 塑料镀铝浸底漆咬底怎么办 标志408钥匙掉了怎么办 房本测绘页丢了怎么办 房本测绘页信息有误怎么办 税务登记证办完没有年检怎么办 建筑施工升降机司机证怎么办 北京建筑施工证怎么办呢 模拟城市5水抽干了怎么办 ip地址错误网络无法接通怎么办 rhino模型太大打开半天怎么办 日本新干线车票丢了怎么办 房间太干燥怎么办又热 薄荷叶子全干了怎么办 水培栀子花叶子蔫了怎么办 薄荷叶叶边干了怎么办 碗莲叶子发黑腐烂怎么办 龟背叶叶子蔫了怎么办 夏天龟背竹蔫了怎么办 春羽叶子长黄斑怎么办 百合竹叶子发黄掉落怎么办 凤尾蕨叶子蔫了怎么办 绿地珊瑚蕨干了怎么办 翠云草叶子蔫了怎么办 珊瑚蕨叶子烂了怎么办 黑骨茶叶子黑斑怎么办 外场主持没有人互动怎么办 企业年报填错了怎么办