Demo:FreeRTOS:修订间差异
创建页面,内容为“在Bouffalo SDK上使用FreeRTOS APP。” |
添加具体内容。 |
||
| 第1行: | 第1行: | ||
在Bouffalo SDK上使用FreeRTOS APP。 | 在Bouffalo SDK上使用FreeRTOS APP。 | ||
=== 源码介绍: === | |||
该文件的源码在 bouffalo_sdk/examples/freertos/main.c中,该测试 demo 简单测试了一些组件,包括Semaphore,Mutex,Queue,Priority 的基本简单测试。 | |||
测试分为两个阶段: | |||
阶段一以消费者生产者模型测试'''信号量'''和'''信号队列'''组件,共生成三个Task。阶段结束后Task自动销毁。 | |||
阶段二以共简单共享资源简单测试Task争夺临界资源的方式测试'''互斥量''',途中高优先级的任务将启动并占用CPU一段时间以此测试抢占'''任务调度'''。 | |||
=== 源码编译: === | |||
在该文件夹下有一个README.md文件,该文件中根据不同的开发板型号有不同编译的参数,例如bl616 :<syntaxhighlight lang="bash"> | |||
- BL616/BL618 | |||
``` | |||
make CHIP=bl616 BOARD=bl616dk | |||
``` | |||
#以上为README文件中的内容,根据内容直接执行对应make编译指令即可 | |||
</syntaxhighlight>make如果成功,你会在终端看到: | |||
[[文件:Make success.png|无|有框]] | |||
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选择对应开发板型号。 | |||
[[文件:烧录Step1.png|无|缩略图|269x269像素]] | |||
Step2:选择对应的 .bin 文件,选择对应的串口。 | |||
'''注意:要选择IOT并勾选enable''' | |||
[[文件:烧录Step2.png|无|缩略图]] | |||
Step3: | |||
'''按住boot键按一下复位键(全程boot键不松开),然后点击Create & Download'''。查看下方的输出信息是否烧录成功。 | |||
=== 源码部分输出: === | |||
<syntaxhighlight lang="bash">[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.</syntaxhighlight> | |||
2025年5月30日 (五) 08:11的版本
在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.