μC/OS-III 大作业,可以应用在苹果派、蓝莓派等开发板上。
目标
实现一个自己的操作系统,能够运行在 Cortex M4 架构的处理器上。
要求
代码规范请严格参照《软件设计规范(C语言).V1.0.0》,请在附件里查阅。所有的 API 函数名字统一格式OSxxx,内部函数不做要求。
基础部分:
1、具有内存管理组件。
2、具有任务管理组件。
3、具有信号量组件。
4、具有消息队列组件。
5、具有互斥量组件。
6、具有事件标志组。
发挥部分,不做具体要求:
1、能够统计任务栈区使用量、总的 CPU 利用率和单个任务 CPU 利用率。
2、支持协程。
3、集成一个 DOS 或 Shell 终端交互组件。
4、集成 GUI 组件。
5、集成文件系统组件。
6、集成以太网组件。
7、集成 HC-05 或其它蓝牙模块驱动。
8、集成 ESP8266 或其它 Wi-Fi 模块驱动
9、其它物联网相关的组件。
配置要求
要求系统中要有一个配置文件,用于使能、禁用各种组件。使能时统一使用 “#define XXX 1”,禁用时统一使用 “#define XXX 0”。预编译命令统一使用 “#if (0 != XXX)”,不得使用 “#ifndef XXX” 语句。
内存管理组件要求
内存管理组件是系统中的核心组件,要求能支持申请和释放动态内存,申请动态内存时要求能申请一段连续的、长度不一的动态内存,而不是只能申请单个内存块。多次申请和释放后不得出现内存碎片。因为申请和释放内存时动态内存的长度不定,消耗时长不可预计,所以不要求能在中断里动态的申请和释放动态内存。
选做:
1、能支持多个内存区,例如内部 SRAM 一个内存区,外部 SRAM/SDRAM 为另一个内存区。
2、具有快速内存拷贝。
3、支持内存重新分配。
任务管理组件要求
1、要使用就绪列表,并能通过 CLZ 指令快速查找就绪任务。
2、要使用增量列表来管理任务延时。
3、创建任务时要能动态创建或静态创建。静态创建时,任务 TCB 和任务栈区所消耗的内存由用户提供;动态创建时,任务 TCB 和任务栈区所消耗的内存由内存管理组件动态分配。
4、信号量、消息队列和互斥量等组件做任务通信时,要能通过任务 TCB、任务名或任务函数首地址访问到任务。要能通过宏定义单独使能通过任务 TCB、任务名或任务函数首地址访问到任务。通过任务名访问任务时,要求能忽略大小写。
5、任务调度时,若处理器有浮点运算单元,则需要将浮点运算单元相关寄存器也保存到任务栈区。
选做:支持 Cortex M3、Cortex M23、C28x 、RISC-V 等架构。
信号量组件要求
1、要支持二值信号量和计数信号量。
2、要能在中断里释放二值信号量和计数信号量。
3、任务级和中断级统一使用相同的 API 函数。
4、要能单独使能、禁用该组件。
5、使用内建信号量的形式,信号量的最大计数量由任务创建函数确定。
6、要能通过 API 函数获取、修改信号量最大计数值。
选做:多个信号量可以进行组合,中断或任务里可以通过一个 API 函数将信号量广播出去。
消息队列组件要求
1、使用传值而非传引用模式。
2、要能在中断里发送数据。
3、任务级和中断级统一使用相同的 API 函数。
4、要能单独使能、禁用该组件。
5、使用内建消息队列的形式,消息队列的长度由任务创建函数确定,消息队列缓冲区所消耗的内存由内存管理组件动态分配。
6、具有清空队列、获取队列数据量、判断是否为空、是否为满等 API 函数。
选做:实现通用消息队列,支持任意数据类型。
互斥量组件要求
1、能够递归使用。
2、中断里不得获取和释放互斥量。
3、任务级和中断级统一使用相同的 API 函数。
4、要能单独使能、禁用该组件。
5、创建互斥量时要求能动态创建或静态创建。动态创建时,互斥量控制块所消耗的内存由内存管理组件动态分配;静态创建时,互斥量控制块所消耗的内存由用户自行分配。
选做:并支持优先级翻转。
事件标志组要求
1、一个事件标志组具有 32 个事件标志位。
2、等待时可以选择等待事件标志位清零或置一、可以是任一事件发生后唤醒,也可以是所有事件发生后唤醒。
3、支持在中断里设置事件标志位。
4、要能单独使能、禁用该组件。
5、创建事件标志组时要求能动态创建或静态创建。动态创建时,事件标志组控制块所消耗的内存由内存管理组件动态分配;静态创建时,事件标志组控制块所消耗的内存由用户自行分配。
选做:任务可以同时等待多个事件标志组。
评分标准
基础部分实现(60分)+ 代码规范(10分)+ 选做(20分)+ 发挥(10分)
不会吧不会吧,这么简单
你怎么敢的啊
博主本人
再不发就没了
不会吧不会吧,这么简单的东西还没有思路