Demo:FreeRTOS
在Bouffalo SDK上使用FreeRTOS APP。
源码介绍:
该文件的源码在 bouffalo_sdk/examples/freertos/main.c中,该测试 demo 简单测试了一些组件,包括Semaphore,Mutex,Queue,Priority 的基本简单测试。
测试分为两个阶段:
阶段一以消费者生产者模型测试信号量和信号队列组件,共生成三个Task。阶段结束后Task自动销毁。
阶段二以共简单共享资源简单测试Task争夺临界资源的方式测试互斥量,途中高优先级的任务将启动并占用CPU一段时间以此测试抢占任务调度。
源码编译:
在该文件夹下有一个README.md文件,该文件中根据不同的开发板型号有不同编译的参数,例如bl616 :
- BL616/BL618
```
make CHIP=bl616 BOARD=bl616dk
```
#以上为README文件中的内容,根据内容直接执行对应make编译指令即可
make如果成功,你会在终端看到:

Generate .../bouffalo_sdk/examples/freertos/build/build_out/freertos_bl616.bin 代表生成了对应可供烧录的固件。
开发板烧录:
执行make命令后,在该文件夹下会生成一个build目录,在文件夹中有一个生成的固件 freertos_bl616.bin ,该文件用于烧录直接使用(类似于keil生成的.hex文件)。
其具体路径为 .../bouffalo_sdk/examples/freertos/build/build_out/freertos_bl616.bin
下载烧录工具:
下载BLDevCube工具:下载后解压即可直接使用。
烧录具体步骤:
Step1:打开DevCube选择对应开发板型号。

Step2:选择对应的 .bin 文件,选择对应的串口。
注意:要选择IOT并勾选enable

Step3:
按住boot键按一下复位键(按复位时boot键不松开),然后点击Create & Download。查看下方的输出信息是否烧录成功。
源码部分输出:
[FREERTOS_TEST CONSOLE] ===== PHASE 1: Queue/Semaphore Test =====
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting consumer tasks...
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting producer task...
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: task started
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: task started
[FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success
[FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: received msg (task:1, ts:1)
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: received msg (task:1, ts:501)
[FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: received msg (task:1, ts:1001)
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: queue empty
.....
[FREERTOS_TEST CONSOLE] ===== PHASE 2: Priority/Mutex Test =====
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: Exiting due to phase change
[FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: Exiting due to phase change
[FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: Exiting due to phase change
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] Starting High Priority task...
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] Starting Shared Resource tasks...
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Attempt to acquire mutex
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired.
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 1
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Holding mutex for 500ms
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Attempt to acquire mutex
.....
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Holding mutex for 500ms
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Attempt to acquire mutex
[FREERTOS_TEST CONSOLE] [I][MAIN] [High Priority Task]: High priority task running
[FREERTOS_TEST CONSOLE] [I][MAIN] [High Priority Task]: Completed
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Release mutex
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired.
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 5
.....
[FREERTOS_TEST CONSOLE] ===== END PHASE 2 =====
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Release mutex
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired.
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 11
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Holding mutex for 500ms
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Exiting due to phase change
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Release mutex
[FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Exiting due to phase change
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] All Test Complete.