嵌入式软件工程师应聘知识点

el/2024/7/17 22:27:57
嵌入式软件工程师应聘
修改浏览权限 | 删除

数据结构(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):控制访问临界资源的信号量的优先级天花板。

优先级继承策略对任务执行流程的影响相对教小,因为只有当高优先级任务申请已被低优先级任务占有的临界资源

这一事实发生时,才抬升低优先级任务的优先级。


http://www.ngui.cc/el/5618088.html

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局&#xff0c;跟踪函数调用的汇编代码。分析了C对象内存的布局情况&#xff0c;虚函数的执行方式&#xff0c;以及虚继承&#xff0c;等等 文章链接&#xff1a;http://dev.yesky.com/254/2191254.shtml 论C/C函数间动态内存的传递 (2005-07-30)…

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2&#xff0c;而类B1、B2都继承自类A&#xff0c;因此在类D中两次出现类A中的变量和函数。为了节省内存空间&#xff0c;可以将B1、B2对A的继承定义为虚拟继承&…

C语言中联合体union的使用

本文编辑整理自&#xff1a; http://bbs.chinaunix.net/forum.php?modviewthread&tid179471 一、前言 “联合体”(union&#xff09;与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和…

linux生产者,消费者问题

pthread_cond_wait() &#xff1a;用于阻塞当前线程&#xff0c;等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过…

可重入函数的深入理解以及printf的可重入性

这个概念在嵌入式操作系统中比较重要&#xff0c;由于存在任务的调度&#xff0c;它实时系统&#xff0c;可剥夺型内核中是危险的&#xff0c;如同一个安静的水雷。可能会被触发&#xff0c;也可能安然无恙。由于它运行结果的不可预期性&#xff0c;会使系统带来隐患。 printf(…

设计一组N个数,确定其中第k个最大值

今天看算法分析是&#xff0c;看到一个这样的问题&#xff0c;就是在一堆数据中查找到第k个大的值。 名称是&#xff1a;设计一组N个数&#xff0c;确定其中第k个最大值&#xff0c;这是一个选择问题&#xff0c;当然&#xff0c;解决这个问题的方法很多&#xff0c;本人在网上…

C++调用C生成的动态库

看下面这个例子&#xff0c;其中add函数是用c编写的代码&#xff0c;而主函数是用c编写的代码&#xff0c;将c代码编译成动态库&#xff0c;然后用c调用。 add.h #ifndef ADD_FILE_HEADER_INC #define ADD_FILE_HEADER_INC #include <stdio.h> #include <malloc.h&…

C语言调用C++库接口的方法概述

最近需要在由纯c语言编写的代码中调用C的动态库&#xff0c;在网上找了一些资料&#xff0c;现在总结下解决方法。 主要的思想就是将C的动态库再封装一层&#xff0c;在这一层编写C语言的函数api&#xff0c;这API中使用C动态库提供的类&#xff1b; 具体例子如下&#xff1a; …

linux多进程共享内存

shmget函数原型 shmget(得到一个共享内存标识符或创建一个共享内存对象) 所需头文件 #include <sys/ipc.h> #include <sys/shm.h> 函数说明 得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符 函数原型 int shmget(key_t key, size_t size, int s…

fork,vfork,clone的区别

fork和clone的区别&#xff1a; Linux将创建进程和执行所创建的进程分为2个阶段。第一个阶段是创建。父进程首先复制子进程&#xff0c;所复制出来的子进程拥有自己的任务结构体和系统堆栈&#xff0c;除此之外所有资源都与父进程共享。Linux提供两种方式复制子进程&#xff1a…