- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
凹凸笔试题目(嵌入式软件开发)
2007-02-07
Embedded Software Design Engineer1 读程序段,回答问题int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf(d=%d\n,d);return 0;}a) 写出程序输出b) 在一个可移植的系统中这种表达式是否存在风险?why?#include stdio.hint 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) 编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg. stack,heap,data section,bss section),最好用图形方式描述。2 中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准C支持中断,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。__interrupt double compute_area(double radius){double area = PI * radius *radius;printf(nArea = %f, area);return area;}3 C/C++基础知识问题a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。b) C语言中static关键字的具体作用有哪些 ?c) 请问下面三种变量声明有何区别?请给出具体含义int const *p;int* const p;int const* const p;4 嵌入式系统相关问题a) 对于整形变量A=0请画出在little endian及big endian的方式下在内存中是如何存储的。b) 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?c) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?5 设周期性任务P1,P2,P3的周期为T1,T2,T3分别为100,150,400;执行时间分别为20,40,100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。6 优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。a) 首先请解释优先级反转问题b) 很多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
2 a)ISR不能返回一个值; b)ISR不能传递参数; c)浮点一般都是不可重入的; d)printf函数有重入和性能上的问题。
3 a) 用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里
重新读取它的值,并不要随意针对它作优化。
建议使用volatile变量的场所:(1) 并行设备的硬件寄存器(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)(3) 多线程应用中被几个任务共享的变量
b) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 在模块内(但在函数体外),一个被声明
您可能关注的文档
最近下载
- 统编版四年级上册语文第二单元习作:我的家人 课件(共23张PPT).ppt VIP
- (医学课件)干燥综合征PPT幻灯片.ppt VIP
- 水质理化检验-有机污染指标的测定.ppt
- 金蝶云星空 V9.0产品培训_PLM_安装部署.pptx VIP
- 心理健康教育课件《培养积极心态》.ppt VIP
- 2025年华医网继续教育幼年特发性关节炎护理新进展题库及答案.docx VIP
- 《宋故尚书左仆射叶颙考》《宋故尚书左仆射叶颙年表》(修订稿)-20121015.doc VIP
- 《分数除法》重难点突破.doc VIP
- 六年级数学上册第三单元《分数除法(一)》重难点题型练习(含答案).docx VIP
- 24J306(替代 07J306)窗井、设备吊装口、排水沟、集水坑.docx
文档评论(0)