第三章:嵌入式系统软件基础
violate关键字
violate是不稳定,易变的,修饰变量是为了告诉编译器不要对该变量的读取进行优化,每次使用该变量的时候必须重新访问相应的内存地址重新读取,而不是直接使用保存在寄存器中的备份。多用于:
1)并行设备的硬件寄存器
2)存在异步操作的程序(例如中断服务或者信号处理函数等)
3)多线程中被几个任务共享的变量
static关键字
1)局部变量声明为static,那么这个静态局部变量不会随着函数的退出而消失,而是维持不变,下次函数被调用的时候,这个变量值也不会被重新初始化,而是保持上次调用的值;
2)全局变量声明为static,那么该全局变量的作用域被限定在该变量所在的文件,不能被此文件之外的其它代码引用,保证全局变量的作用域限定在一个模块内部,避免多个模块中被引用引发混乱;
3)函数声明声明为static,那么该函数的作用域被限定在本模块内,一般,函数的作用域是全局的,能被其它文件中的函数调用,声明为静态函数后,则只能被模块内的其它函数调用,其它文件模块不可见。
操作系统的发展
无系统 简单的批处理操作系统
(单用户单任务)多道批处理操作系统
(单用户多任务)微机操作系统
(Windows、Linux)分时操作系统
(多用户多任务)网络操作系统
(C/S、P2P)实时操作系统 分布式操作系统
常见嵌入式操作系统
1)VxWorks实时操作系统;
2)uC/OS-II 抢占式多任务的实时操作系统,不支持时间片轮转调度法,所以赋予的每个任务的优先级必须不同,可以管理64个任务,其中系统保留8个任务,应用程序最多可以使用56个任务;
3)MicrosoftWindows CE多线程,多任务的操作系统,基本内核需要至少200kB的ROM,而且在实时方面的表现也不尽如人意,对硬件要求高,耗电大,另外许可证价格高也限制了它的推广;
4)由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为9.0.0版
5)Linux是一个成熟、稳定的网络操作系统;开放源码,不需要许可证费用,成本低;易于裁剪和移植;应用软件众多,有许多公开的代码可以参考和移植,加快开发进程。
操作系统的功能
进程管理:完成资源的分配和调度,主要包括进程控制,进程调度,进程同步和进程间通信
存储器管理:完成计算机内存资源的管理和分配任务
设备管理:管理各种计算机外设(I/O设备),主要由设备驱动程序完成
文件管理:管理磁盘上的各种文件和目录
动态链接和静态链接
静态链接:在程序链接时解决外部符号的引用问题,将源程序编译后的各个目标模块与静态链接库中相关的符号定义一起装配形成一个完整的可执行文件;
动态链接:在程序链接时不直接解决外部符号引用问题,只将目标模块装配成部分可执行文件,在程序执行时,通过动态链接程序再将动态链接库与可执行文件联系起来;
动态库(共享库 *.so),动态库的代码在运行时才链接,因此一般采用动态库开发的程序代码体积小
静态库(*.a),静态库则是在程序运行前已经链接到目标程序,因此程序体积较大
生成静态链接库
gcc - c hello.c -o hello.o
ar -cqs libhello.a hello.o (库文件一般以lib开头)
生成动态链接库
gcc -c hello.c -o hello.o
gcc -shared -o libhello.so hello.o
将生成的libhello.a,libhello.so拷贝到/usr/lib或者/lib下面
查看库文件里面有哪些函数
nm libhello.o
查看可执行文件调用哪些库
ldd hello