查看文章 |
数据结构(C语言)部分常考的知识点: 1、局部变量能、全局变量和静态变量 2、堆和栈 3、Const、volatile、define、typedef的用途 4、链表(比如链表的插入、删除和排序) 5、排序(考查冒泡法的较多) 6、可重入函数 、malloc函数 7、指针(常考函数指针,函数指针,数组指针,指针数组和其他的应用),结构体和共用体 8、#include<filename.h>和#include“filename.h”的区别。
操作系统部分常考的知识点: 1、中断和异常 2、进程和线程 3、进程的同步机制,进程通信和进程的死锁 4、优先级反转和优先级继承问题 5、makefile文件
一些嵌入式开发的网址: 国外站点 Linux设备网站,由Rick Lehrbaum创建和维护,是一个嵌入式Linux入门网站,其中包含 嵌入式Linux行业的每日新闻、完整系列的快速参考指南、由重要开发者撰写的大量文章 ,还包括一个交互论坛。 http://www.linuxdevices.com/ 下载嵌入式Linux交叉编译工具链的好地方 SnapGear Embedded Linux Distribution Home Page http://www.snapgear.org/snapgear/index.html http://www.uclinux.org/pub/uClinux/...lf-tools/gcc-3/ 嵌入式Linux联盟(ELC),一个非盈利性的厂商中立的同业工会,其目标是在整个嵌入式 、应用和设备市场中发展和推广Linux。 www.embedded-linux.org Beyond Logic公司主页,提供了许多嵌入式Linux系统开发的资料。 http://www.beyondlogic.org 嵌入式Linux期刊(ELJ,Embedded Linux Journal),主要关注Linux和其他开源软件在嵌 入式系统中的应用。 其中有很多业界领导者为ELJ撰写文章。 embedded.linuxjournal.com 有几本写嵌入式Linux系统的书 http://www.embeddedlogic.com/ELSweb/booklinks.html 有关PowerPC体系的嵌入式 www.mvista.com www.denx.de/e/index1.php IXP4XX Open Source Developers Guide http://ixp4xx-osdg.sourceforge.net/ uClinux/ARM项目 http://adam.kaist.ac.kr/~hschoe/notice.html 个人主页 一个业余爱好者代礼周的个人主页,都是实践出来的 http://www.lomx.net/index.htm D_J嵌入式个人主页,有很多资料! http://staff.ustc.edu.cn/~wangzhuo/index.html renbagshoes的个人主页,有些资料可能你会用的到! http://timity.nease.net 嵌入式Linux操作系统 小型化的嵌入式Linux版本 uClinux — 在没有 MMU 的系统上运行的 Linux。目前支持 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微处理器。 http://www.uclinux.org/index.html Etlinux — 设计用于在小型工业计算机,尤其是 PC/104 模块上运行的 Linux 的完全 分发版 http://www.prosa.it/etlinux/index.html Tiny Linux ── 可以运行在 386 上的 Linux 分发版。 http://tiny.seul.org/en/ ThinLinux ── 面向专用的照相机服务器、X-10 控制器、MP3 播放器和其它类似的嵌 入式应用的最小化的 Linux 分发版。 www.thinlinux.org LRP(Linux Route Project) http://www.linuxrouter.org Peeweelinux一个小的嵌入式Linux发行版 http://freshmeat.net/projects/peeweelinux 具有实时扩展功能的嵌入式Linux版本 RT-Linux主页 http://www.fsmlabs.com http://www.rtlinux.com RTAI http://www.rtai.org EL/IX SRT-Linux 嵌入式GUI Microwindows由Century Software的CEO Greg Haerr主持开发的一个公开源码(LGPL)的 项目。Microwindows致力于为一些小型设备和平台提供现代图形窗口环境。Microwindow s支持许多硬件平台,移植性很强。Microwindows的主要目的之一便是运行在嵌入式Linu x上,并且提供了基于Win32/X的两套API接口。 http://www.microwindows.org http://microwindows.org MiniGUI由原清华大学教师魏永明先生开发,是中国人做的得较好的自由软件之一。Mini GUI 是一种面向嵌入式系统或者实时系统的公开源码(LGPL)的图形用户界面支持系统。 它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系 统上。 http://www.minigui.org 飞漫软件的MiniGUI项目 http://www.minigui.com/company/cindex.shtml Qt/Embedded是著名的QT库开发商Trolltech正在进行的面向嵌入式系统的QT版本。Qt/Em bedded对于各种硬件接口到GUI工具包提供了完整的图形栈。Qt/Embedded的API同Qt/X11 和Qt/Windows的相同,但它并不是基于X11库的。Qt/Embedded是公开源码(LGPL)项目。 http://www.trolltech.com OpenGUI基于一个用汇编实现的x86图形内核,提供了一个快速的、32位的、高层的C/C++ 图形接口。OpenGUI也是一个公开源码(LGPL)项目。OpenGUI提供了二维绘图原语,消息 驱动的API和BMP文件格式支持。 http://www.tutok.sk/fastgl PicoGUI是一个可以工作在包括手持式设备等各种硬件上的小型的、可移植的、基于客户 /服务器结构的GUI。同X Window系统一样,它具有客户—服务器结构的灵活性,但又不 同于X Window系统,它将字体、BMP文件、控件以及一些应用程序所需要的其它的一些资 源直接集成在服务器。虽然减少了系统的灵活性,但在速度上有了很大的提高,并且减 小了程序大小。 http://picogui.org Tiny-X是一个为嵌入式系统而开发的紧缩型的X Window服务器。它由SuSE赞助,由XFree 86的核心成员Keith Packard开发。Tiny-X的目标是可以在小内存或几乎无内存的情况下 良好运行。 http://www.pps.jussieu.fr/~jch/software/kdrive.html
凹凸笔试题目(嵌入式软件开发) 2007-02-07 Embedded Software Design Engineer 1 读程序段,回答问题 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.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) 编译器如果安排各个变量(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;p是一个指向常整型变量的指针。 int* const p;p是一个指向整型变量的常数执政。 int const* const p; 4 嵌入式系统相关问题 a) 对于整形变量A=0x12345678,请画出在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) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数 访问。它是一个本地的全局变量。 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的 模块的本地范围内使用。 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 高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象叫做优先级反转 优先级继承策略(Priority inheritance):继承现有被阻塞任务的最高优先级作为其优先级,任务退出临界区,恢 复初始优先级。 优先级天花板策略(Priority ceilings):控制访问临界资源的信号量的优先级天花板。 优先级继承策略对任务执行流程的影响相对教小,因为只有当高优先级任务申请已被低优先级任务占有的临界资源 这一事实发生时,才抬升低优先级任务的优先级。 |

