Demo:posix freertos

来自Bouffalo Lab Docs
跳转到导航 跳转到搜索

Demo介绍:

保存在SDK下:bouffalo_sdk/examples/posix/freertos

这段代码主要测试了两个POSIX标准接口在FreeRTOS环境下的功能实现:消息队列(Message Queue)和信号量(Semaphore)。

Posix标准:

这是一个接口标准,由于Linux的各种版本发布非常非常多,导致如果没有标准,那么一个软件要适配所有发行版本的难度极高。IEEE组织设定了一个标准,这解释了为什么个个Linux的命令比如ls clear cd mkdir 等基本命令可以通用。

代码分析:

  1. 消息队列测试 (mqueues_test.c):
    • 创建两个消息队列mq1和mq2
    • 创建4个线程:send1、send2和rev1、rev2
    • 每个发送者发送3条不同优先级的消息
    • 每个接收者接收3条消息
  2. 测试重点:消息队列的基本操作:mq_openmq_sendmq_receivemq_closemq_unlink 非阻塞模式O_NONBLOCK的工作情况
  1. 信号量测试 (semaphores_test.c):
    • 实现了一个经典的生产者-消费者模型
    • occupied: 控制缓冲区可用空间
    • empty: 控制缓冲区已使用空间
    • lock: 互斥锁保护缓冲区访问
  2. 测试重点:信号量的基本操作:sem_initsem_waitsem_postsem_destroy,多线程同步和互斥机制,生产者-消费者问题的正确处理

示例输出:

===========================
uart  sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
[OS] Starting proc_hellow_entry task...
Enter into send_1 
[1] send 'msg test 1' in thread send_1. 
[2] send 'msg test 2' in thread send_1. 
[3] send 'msg test 3' in thread send_1. 
Enter into send_2 
[1] send 'msg test 1' in thread send_2. 
[2] send 'msg test Enter into receive_1 
[1] receive 'msg test 1' in thread receive_1. 
[2] receive 'msg test 2' in thread receive_1. 
[3] receive 'msg test 3' in thread receive_1. 
Enter into receive_2 
[1] receiv2' in thread send_2. 
[3] send 'msg test 3' in thread send_2. 
e 'msg test 1' in thread receive_2. 
[2] receive 'msg test 2' in thread receive_2. 
[3] receive 'msg test 3' in thread receive_2. 
mq PASS 
producer has added 0 to the buffer[0] 
producer has added 100 to the buffer[1] 
producer has added 200 to the buffer[2] 
producer has added 300 to the buffer[3] 
producer has added 400 to the buffer[4] 
consumer has taken 0 from buffer[0] 
consumer has taken 100 from buffer[1] 
consumer has taken 200 from buffer[2] 
consumer has taken 300 from buffer[3] 
consumer has taken 400 from buffer[4] 
producer has added 500 to the buffer[0] 
producer has added 600 to the buffer[1] 
producer has added 700 to the buffer[2] 
producer has added 800 to the buffer[3] 
producer has added 900 to the buffer[4] 
consumer has taken 500 from buffer[0] 
consumer has taken 600 from buffer[1] 
consumer has taken 700 from buffer[2] 
consumer has taken 800 from buffer[3] 
consumer has taken 900 from buffer[4] 
sema PASS