- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
,.
,.
凹凸笔试题目(嵌入式软件开发)
2007-02-07
Embedded Software Design Engineer
读程序段,回答问题
int main(int argc,char *argv[])
{
int c=9,d=0; c=c++%5;
d=c; printf(d=%d\n,d); return 0;
}
写出程序输出
在一个可移植的系统中这种表达式是否存在风险? why?
#include stdio.h int a=0;
int b;
static char c;
int main(int argc,char *argv[])
{
char d=4; static short e;
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,b,c,d) 在内存中的布局(eg. stack,heap,data section,bss section),最好用图形方式描述。
中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准 C 支持中断,产生了一个新的关键字 interrupt。下面的代码就使用了 interrupt 关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。
interrupt double compute_area(double radius)
{
double area = PI * radius *radius; printf(nArea = %f, area);
return area;
}
C/C++基础知识问题
关键字 volatile 在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。
C 语言中 static 关键字的具体作用有哪些 ?
请问下面三种变量声明有何区别?请给出具体含义int const *p;
int* const p;
int const* const p;
嵌入式系统相关问题
对于整形变量 A=0请画出在 little endian 及 big endian 的方式下在内存中是如何存储的。
在 ARM 系统中,函数调用的时候,参数是通过哪种方式传递的?
中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?
5 设周期性任务 P1,P2,P3的周期为 T1,T2,T3分别为100,150,400;执行时间分别为20,40,
100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。
6 优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。
首先请解释优先级反转问题
很多 RTOS 提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings) 用来解决优先级反转问题,请讨论这两种策略。
参考答案:
1 5
存在风险,因为 c=c++%5;这个表达式对 c 有两次修改,行为未定义,c 的值不确定int a=0; // data section
int b; // data section static char c; // BSS
int main(int argc,char *argv[])
{
char d=4; // stack static short e; // 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
a)ISR 不能返回一个值; b)ISR 不能传递参数;
浮点一般都是不可重入的;
printf 函数有重入和性能上的问题。
a) 用 volatile 关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里
重新读取它的值,并不要随意针对它作优化。建议使用 volatile 变量的场所:
并行设备的硬件寄存器
一个中断服务子程序中会访问到的非自动变量(全局变量)
多线程应用中被几个任务共享的变量
在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数
访问。它是一个本地的全局变量。
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数 被限制在声明它的
模块的本地范围内使用。
static
文档评论(0)