1. 本次作业的考察要点:
作业地址:
github.com/HustWolfzzb…
Git/GCC/GDB/QEMU等工具的使用。
FreeRTOS多任务同步和通信机制的掌握。
2. 编程作业:
在github上,Fork例程项目(github.com/cbhust/STM3… 到自己的个人账号。
clone项目到本地电脑的Ubuntu虚拟机中(虚拟机环境在第一次作业中已搭建)。
按照/Projects/Demo1/README.md中的提示编译Demo1例程并通过Qemu运行例程。
在Demo1的框架基础上完成自己的本次编程作业(具体要求见第3点)。
代码完成后提交到自己的github账号上,确保助教可以正常的clone并编译运行。
在作业博客上给出代码的github链接、代码说明以及运行结果展示。
3. 编程作业具体要求:
创建三个任务:Sender_Task,Receiver_Task, Monitor_Task
- Sender_Task的任务执行周期为2ms,Receiver_Task的任务执行周期为1000ms, Monitor_Task的任务执行周期为10000ms。
- Sender_Task在每个执行周期向Receiver_Task发送一个32位无符号整数,第一次发送1,然后依次发送2,3,4......,发送完10000后再从1开始发送。同时对发送的数据进行计算累加计算并保存当前累加结果。
- Receiver_Task对接收到的数据进行和Sender_Task同样的累加计算并保存当前累加结果。
- Monitor_Task在每个执行周期检查Sender_Task发送的每个数据是否都被Receiver_Task正确的接收和处理,请自行设计一种检查机制并实现。
- 可利用STM32F429I Discovery开发板的相关硬件(LED/LCD/串口)来输出相关状态信息。
- 使用FreeRTOS的任务间通信和同步API完成上述功能。
4. 任务说明(会用到的API)
- 任务创建
头文件:task.h
portBASE_TYPE xTaskCreate (
pdTASK_CODE pvTaskCode, 指向任务的实现函数的指针。效果上仅仅是函数名
const portCHAR const pcNane, 具有描述性的任务名。FreeRTOS 不会使用它。
unsigned portSHORT usStackDepth, 指定任务堆栈的大小
void pvParameters, 指针用于作为一个参数传向创建的任务
unsigned portBASE_TYPE uxPriority, 任务运行时的优先级
xTaskHandle *pvCreatedTask 用于传递任务的句柄,可以引用从而对任务进行其他操作。
)
说明:
- 这里的任务是指一个永远不会退出的C 函数,通常是一个死循环。
- pcNane 其只是单纯地用于辅助调试。应用程序可以通过定义常量
config_MAX_TASK_NAME_LEN 来定义任务名的最大长度——包括’