-
中断
中断异步通讯模式,节约CPU的资源任何打断系统正常进行的流程:外部中断、内部异常中断控制器根据中断屏蔽优先级,中断是否使能等各种条件进行筛选,最后通知CPU,CPU进行跳转执行相应的处理,PC指针跳转到中断向量表中,向量表中存储不同的跳转指令,跳转至相应的中断函数。在进行跳转之前CPU会对CPSR(程序状态)寄存器进行保存,并重新设置模式,将各种数据、状态压入栈,然后根据中断号跳转到对应的处理函数,处理完毕之后复原。 注:中断返回的语句是当前执行的语句,函数返回的语句是当前语句的下一句。...…
-
MMU内存管理单元
MMU内存管理单元 作用:把虚拟的内存地址转化成实际的地址,用来处理不同应用加载到内存以后内存分配的问题。虚拟地址通过地址和转换表把实际的内存和虚拟的内存相互转换,转换表以4KB为一个基本单位进行记录,所以也叫做页表。CPU根据页偏移以及页帧号例: 虚拟地址10004 = 0x10 + 0x004 页表 10:30005 物理地址: 30005004实际上是由硬件软件一同完成的,CPU集成的MMU进行转换,页表是由操作系统进行操控的,地址完成转换之后更新到每一个进程CPU内部一般会...…
-
模块间通讯
模块间通讯全局变量 通过extern让全局变量可以被外部文件调用优点:调用简单直接缺点:增加了文件之间的耦合性 改进:增加接口对其访问//module.hvoid val_set(int value);void val_get(void);//module.cint global_val;void val_set(int value){ global_val = value;}void val_get(void){ return global_val;}回调函数stdio....…
-
模块进阶
模块进阶跨平台设计==不同的操作系统提供的API不同,需要对接口进行封装== C语言本身与平台无关,是跨平台的,C语言的标准和C语言的标准库里提供的接口也和平台无关,由C语言的标准确定,所以应该尽可能的使用C语言的标准函数而不是操作系统的接口。==不同的CPU的位宽、大小端、内存对齐== 对于使用合适的数据类型:C语言标准类型、固定大小可移植、内核数据类型可行的方法 把操作系统为相关的调用封装成接口,隐藏不同操作系统之间的差异 头文件路径分隔符使用通用的”/”而不是windows下...…
-
模块化编程
模块化编程划分系统:各种模块构成的有机整体模块:独立功能的有机实现当模块数量多时可以对其进行分层与面向对象的关系面向对象:代码复用模块化:分而治之系统定义 ==> 模块化 ==> 面向对象构建合理的目录结构 常见的结构 flat: 所有源文件放在一个目录下 shallow: 各个模块在各自的目录之下,主程序在顶层目录下 deep:主程序模块分别在不同的目录下 Linux下没有工程管理器之类的工具需要手动管理模块的封装 lcd.c 1 #include <st...…
-
操作系统基本原理
操作系统基本原理根据任务的优先级进行分配 1 #include <stdio.h> //linux的系统函数用来产生中断 2 #include <unistd.h> 3 #include <signal.h> 4 5 int task_delay[4] = {0}; 6 void task1(void) 7...…
-
异步通讯
异步通讯同步通讯:CPU等待通讯的完成异步通讯:任务完成之后通知CPU阻塞访问:在任务完成之前CPU不能践行别的任务非阻塞访问:CPU可以进行别的任务常用的异步通讯 消息机制:和平台有关 事件驱动机制:状态机,GUI,前端编程 中断 异步回调…
-
头文件剖析
头文件剖析基本概念 在一个C文件中除了main、跳转标号不需要声明之外所有的标识符在使用之前都需要进行声明,一般我们把函数的声明放在头文件中。变量声明 != 变量定义 ===> 区别:是否分配内存变量定义:生成相关的汇编指令变量声明:告诉编译器,有可能存在于别的文件,编译时候先不要报错,在连接的时候到相应的文件中查找,没有 再报错定义只有一次,声明可以有多次 1 #include <stdio.h> ...…