《嵌入式资料整合共两辑》

1、linux内核代码理解
毛德操 《Linux内核源代码情景分析》、《嵌入式系统》、《深入理解linux内核》
cpu和操作系统,arm和ucos。ucOS功能有限,实用用得较少,而ucLinux功能较多,实用性比较强。
把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。

2、嵌入式软件必须具备的基本技术
(1)掌握主流嵌入式微处理器的结构与原理
(2)必须掌握一个嵌入式操作系统
(3)必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目

3、进程和线程
(1)进程是资源管理的最小单位,线程是程序执行的最小单位。
(2)从进程演化出线程,最主要的目的就是要更好的支持SMP(Symmetry Multiple Processer对称对处理器)以及减少上下文切换开销
(3)线程模型有核心级线程和用户级线程两种线程模型,分类的标准主要是线程的调度者在核内还是在核外,前者更利于并发实用多处理器的资源,
而后者则更多考虑的是上下文切换开销。
(4)在目前的商用系统中, 通常将这两种模型结合起来,既提供核心线程以满足smp系统的需要,也支持用线程库的方式在用户态实现另一套线程机制,
此时一个核心线程同时成为多个用户态线程的调度者。

(5)在核外实现的线程分为“一对一”和“多对一”两种模型,前者用一个核心进程对应一个线程,将线程调度等同于进程调度,交给核心完成,而后者则完全在核外实现多线程,调度也在用户态完成。
目前最流行的线程机制LinuxThreads所采用的就是线程-进程“一对一”模型,调度交给核心,而在用户级实现一个包括信号处理在内的线程管理机制。
最初的进程定义都包含程序、资源及其执行三部分,后来逐渐允许将进程所占用的资源从其主体剥离出来,允许某些进程共享一部分资源,这就发展出了轻量级进程的概念。

(6)LinuxThreads存在不足,不完全兼容POSIX
进程ID问题,这是最关键的不足,Linux内核并不支持真正意义上的线程,这些轻量级进程拥有独立的进程id,而按照POSIX定义,同一
进程的所有线程应该共享一个进程id和父进程id,这在目前的“一对一”模型下是无法实现的;
信号处理问题,某些信号的缺省动作难以在现行体系上实现,比如SIGSTOP和SIGCONT,linuxThreads只能将一个线程挂起,而无法挂起整个进程。
线程总数问题,LinuxThreads将每个进程的线程最大数目定义为1024,但实际上这个数值还受到整个系统的总进程数限制,这是由于线程其实是核心进程。
管理线程问题, 管理线程容易成为瓶颈,这是这种结构的问题,如果管理线程死亡,用户线程就不得不手工清理了。

4、宏
(1)#运算符
把跟在其后的参数转换成一个字符串,把这种用法的#称为字符串化运算符。
#define PASTE(n) "adhfkj"#n
(2)##运算符
##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。
#define NUM(a,b,c) a##b##c
printf("%d",NUM(1,2,3));输出为123
(3)#error指令
将使编译器显示一条错误信息,然后停止编译
#error "This is a compiling error"

 

你可能感兴趣的:(《嵌入式资料整合共两辑》)