Demo:posix freertos
Demo介绍:
保存在SDK下:bouffalo_sdk/examples/posix/freertos
这段代码主要测试了两个POSIX标准接口在FreeRTOS环境下的功能实现:消息队列(Message Queue)和信号量(Semaphore)。
Posix标准:
这是一个接口标准,由于Linux的各种版本发布非常非常多,导致如果没有标准,那么一个软件要适配所有发行版本的难度极高。IEEE组织设定了一个标准,这解释了为什么个个Linux的命令比如ls clear cd mkdir 等基本命令可以通用。
代码分析:
- 消息队列测试 (
mqueues_test.c):- 创建两个消息队列mq1和mq2
- 创建4个线程:send1、send2和rev1、rev2
- 每个发送者发送3条不同优先级的消息
- 每个接收者接收3条消息
- 测试重点:消息队列的基本操作:
mq_open、mq_send、mq_receive、mq_close、mq_unlink非阻塞模式O_NONBLOCK的工作情况
- 信号量测试 (
semaphores_test.c):- 实现了一个经典的生产者-消费者模型
occupied: 控制缓冲区可用空间empty: 控制缓冲区已使用空间lock: 互斥锁保护缓冲区访问
- 测试重点:信号量的基本操作:
sem_init、sem_wait、sem_post、sem_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