
嵌入式学习
Zhupeizhao
深圳大学
展开
-
嵌入式常见的数据结构
0 引言1 线性表1.1 顺序表1.1.1 定义类型1.1.2 相关操作1.1.3 相关操作的实现1.2 链表1.2.1 定义类型1.2.2 相关操作1.2.3 相关操作的实现2 栈2.1 顺序栈2.1.1 定义类型2.1.2 相关操作2.1.3 相关操作的实现2.2 链栈2.2.1 定义类型2.2.2 相关操作2.2.3 相关操作的实现3 队列3.1 顺序队列3.1.1 定义类型3.1.2 相关操作3.1.3 相关操作的实现3.2 链队列3.2.1 定义类型3.2.2 相关操作3.2.3 相.原创 2020-05-10 16:47:52 · 4811 阅读 · 2 评论 -
任务的同步与通信——μC/OS-II
1 事件与事件控制块事件:μC/OS-II使用信号量,消息邮箱,消息队列这些中间环节来实现任务之间的通信,它们统称“事件”事件控制块:μC/OS-II使用数据结构OS_EVENT来描述信号量,消息邮箱,消息队列这些事件。数据结构如下:typedef struct os_event { INT8U OSEventType; //事件类型...原创 2020-05-06 21:24:54 · 1623 阅读 · 0 评论 -
中断,时钟,时间管理——μC/OS-II
1 中断1.1 相关概念 裸机的中断和μC/OS-II的中断大体相同,但也有不同的地方。具体为以下几个方面:中断服务子程序运行结束后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而不一定要继续运行被中断的任务。这里的情况需要满足以下三个条件:中断嵌套层数为0调度器未锁定最高级别的就绪任务不是被中断的任务由上述可知,我们需要记录中断嵌套层数,因此需要...原创 2020-04-20 22:26:00 · 751 阅读 · 0 评论 -
任务管理——μC/OS-II
1 任务代码 用户任务代码一般分为两种。开始任务:启用操作系统函数在main.c函数中调用,在此之前需要创建一个用户任务。规范起见,第一个创建的任务就是开始任务,在此任务中,完成对所有任务的创建。任务创建完成后,挂起开始任务。并且在开始任务的主体中,没有无限循环(只需要执行一次)。//开始任务void start_task(void *pdata){ pdata=pdata;...原创 2020-04-20 20:13:35 · 524 阅读 · 0 评论 -
嵌入式之volatile关键字
0 引言 在计算机中,CPU对RAM的访问速度远远慢于处理速度,而访问寄存器要比访问内存单元快的多。因此在存取变量时,为提高存取速度,编译器有时会优化代码:先把变量存放到一个寄存器中,以后使用该变量值时,直接从寄存器中取值,而不是从RAM读取,从而提高性能。然而,这种优化在带来性能提升的同时,也造成了某些灾难。 1 volatile关键字的原理 volatile的意思是“易变的”,...原创 2020-04-17 21:45:52 · 430 阅读 · 0 评论 -
嵌入式常见的通信接口/协议
0 引言 嵌入式开发中,常见的通信接口/协议有SPI,I2C,UART三种,本文先分三个部分对SPI,I2C,UART进行介绍,最后对这三种协议进行比较。 1 SPI1.1 SPI的简介 SPI(Serial Peripheral Interface):串行外围设备接口。SPI是一种高速的,全双工的,同步的通信总线。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps,已知的有的器件SPI已达到50Mbps。1.2 SPI接口的引脚MOSI(Master Out S原创 2020-04-17 17:25:04 · 4455 阅读 · 0 评论