Demo:FreeRTOS

来自Bouffalo Lab Docs
武楷轩留言 | 贡献2025年6月23日 (一) 02:52的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

在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工具:下载后解压即可直接使用。

https://dev.bouffalolab.com/

烧录具体步骤:

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.