<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=Demo%3Aposix_freertos</id>
	<title>Demo:posix freertos - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=Demo%3Aposix_freertos"/>
	<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Demo:posix_freertos&amp;action=history"/>
	<updated>2026-04-14T06:26:57Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Demo:posix_freertos&amp;diff=145&amp;oldid=prev</id>
		<title>武楷轩：​创建页面，内容为“=== Demo介绍： === 保存在SDK下：bouffalo_sdk/examples/posix/freertos  这段代码主要测试了两个POSIX标准接口在FreeRTOS环境下的功能实现：消息队列(Message Queue)和信号量(Semaphore)。  === Posix标准： === &#039;&#039;&#039;这是一个接口标准&#039;&#039;&#039;，由于Linux的各种版本发布非常非常多，导致如果没有标准，那么一个软件要适配所有发行版本的难度极高。IEEE组织设定了一个标准，这解释了…”</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Demo:posix_freertos&amp;diff=145&amp;oldid=prev"/>
		<updated>2025-08-11T09:15:48Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“=== Demo介绍： === 保存在SDK下：bouffalo_sdk/examples/posix/freertos  这段代码主要测试了两个POSIX标准接口在FreeRTOS环境下的功能实现：消息队列(Message Queue)和信号量(Semaphore)。  === Posix标准： === &amp;#039;&amp;#039;&amp;#039;这是一个接口标准&amp;#039;&amp;#039;&amp;#039;，由于Linux的各种版本发布非常非常多，导致如果没有标准，那么一个软件要适配所有发行版本的难度极高。IEEE组织设定了一个标准，这解释了…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Demo介绍： ===&lt;br /&gt;
保存在SDK下：bouffalo_sdk/examples/posix/freertos&lt;br /&gt;
&lt;br /&gt;
这段代码主要测试了两个POSIX标准接口在FreeRTOS环境下的功能实现：消息队列(Message Queue)和信号量(Semaphore)。&lt;br /&gt;
&lt;br /&gt;
=== Posix标准： ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;这是一个接口标准&amp;#039;&amp;#039;&amp;#039;，由于Linux的各种版本发布非常非常多，导致如果没有标准，那么一个软件要适配所有发行版本的难度极高。IEEE组织设定了一个标准，这解释了为什么个个Linux的命令比如ls clear cd mkdir 等基本命令可以通用。&lt;br /&gt;
&lt;br /&gt;
=== 代码分析： ===&lt;br /&gt;
&lt;br /&gt;
# 消息队列测试 (&amp;lt;code&amp;gt;mqueues_test.c&amp;lt;/code&amp;gt;):&lt;br /&gt;
#* 创建两个消息队列mq1和mq2&lt;br /&gt;
#* 创建4个线程：send1、send2和rev1、rev2&lt;br /&gt;
#* 每个发送者发送3条不同优先级的消息&lt;br /&gt;
#* 每个接收者接收3条消息&lt;br /&gt;
# 测试重点：消息队列的基本操作：&amp;lt;code&amp;gt;mq_open&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;mq_send&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;mq_receive&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;mq_close&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;mq_unlink&amp;lt;/code&amp;gt;  非阻塞模式&amp;lt;code&amp;gt;O_NONBLOCK&amp;lt;/code&amp;gt;的工作情况&lt;br /&gt;
&lt;br /&gt;
# 信号量测试 (&amp;lt;code&amp;gt;semaphores_test.c&amp;lt;/code&amp;gt;):&lt;br /&gt;
#* 实现了一个经典的生产者-消费者模型&lt;br /&gt;
#* &amp;lt;code&amp;gt;occupied&amp;lt;/code&amp;gt;: 控制缓冲区可用空间&lt;br /&gt;
#* &amp;lt;code&amp;gt;empty&amp;lt;/code&amp;gt;: 控制缓冲区已使用空间&lt;br /&gt;
#* &amp;lt;code&amp;gt;lock&amp;lt;/code&amp;gt;: 互斥锁保护缓冲区访问&lt;br /&gt;
# 测试重点：信号量的基本操作：&amp;lt;code&amp;gt;sem_init&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;sem_wait&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;sem_post&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;sem_destroy&amp;lt;/code&amp;gt;,多线程同步和互斥机制，生产者-消费者问题的正确处理&lt;br /&gt;
&lt;br /&gt;
=== 示例输出： ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
===========================&lt;br /&gt;
uart  sig1:ffffffff, sig2:0000f32f&lt;br /&gt;
clock gen1:9ffffffd, gen2:0fff0c11&lt;br /&gt;
xtal:40000000Hz(crystal)&lt;br /&gt;
board init done&lt;br /&gt;
===========================&lt;br /&gt;
[OS] Starting proc_hellow_entry task...&lt;br /&gt;
Enter into send_1 &lt;br /&gt;
[1] send &amp;#039;msg test 1&amp;#039; in thread send_1. &lt;br /&gt;
[2] send &amp;#039;msg test 2&amp;#039; in thread send_1. &lt;br /&gt;
[3] send &amp;#039;msg test 3&amp;#039; in thread send_1. &lt;br /&gt;
Enter into send_2 &lt;br /&gt;
[1] send &amp;#039;msg test 1&amp;#039; in thread send_2. &lt;br /&gt;
[2] send &amp;#039;msg test Enter into receive_1 &lt;br /&gt;
[1] receive &amp;#039;msg test 1&amp;#039; in thread receive_1. &lt;br /&gt;
[2] receive &amp;#039;msg test 2&amp;#039; in thread receive_1. &lt;br /&gt;
[3] receive &amp;#039;msg test 3&amp;#039; in thread receive_1. &lt;br /&gt;
Enter into receive_2 &lt;br /&gt;
[1] receiv2&amp;#039; in thread send_2. &lt;br /&gt;
[3] send &amp;#039;msg test 3&amp;#039; in thread send_2. &lt;br /&gt;
e &amp;#039;msg test 1&amp;#039; in thread receive_2. &lt;br /&gt;
[2] receive &amp;#039;msg test 2&amp;#039; in thread receive_2. &lt;br /&gt;
[3] receive &amp;#039;msg test 3&amp;#039; in thread receive_2. &lt;br /&gt;
mq PASS &lt;br /&gt;
producer has added 0 to the buffer[0] &lt;br /&gt;
producer has added 100 to the buffer[1] &lt;br /&gt;
producer has added 200 to the buffer[2] &lt;br /&gt;
producer has added 300 to the buffer[3] &lt;br /&gt;
producer has added 400 to the buffer[4] &lt;br /&gt;
consumer has taken 0 from buffer[0] &lt;br /&gt;
consumer has taken 100 from buffer[1] &lt;br /&gt;
consumer has taken 200 from buffer[2] &lt;br /&gt;
consumer has taken 300 from buffer[3] &lt;br /&gt;
consumer has taken 400 from buffer[4] &lt;br /&gt;
producer has added 500 to the buffer[0] &lt;br /&gt;
producer has added 600 to the buffer[1] &lt;br /&gt;
producer has added 700 to the buffer[2] &lt;br /&gt;
producer has added 800 to the buffer[3] &lt;br /&gt;
producer has added 900 to the buffer[4] &lt;br /&gt;
consumer has taken 500 from buffer[0] &lt;br /&gt;
consumer has taken 600 from buffer[1] &lt;br /&gt;
consumer has taken 700 from buffer[2] &lt;br /&gt;
consumer has taken 800 from buffer[3] &lt;br /&gt;
consumer has taken 900 from buffer[4] &lt;br /&gt;
sema PASS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>武楷轩</name></author>
	</entry>
</feed>