需要使用的函数
os_mbx_declare(name, cnt) 声明一个邮箱(相当于定义一个变量) 重要!!!
os_mbx_init(mbx, mbx_size) 邮箱初始化
os_mbx_check(mbx) 检测邮箱可存储的消息数
os_mbx_send(mbx, p_msg, tmo) 给邮箱发消息
os_mbx_wait(mbx, message, tmo) 等待消息
另外还有 isr_mbx_check(mbx) ,
isr_mbx_send (OS_ID mailbox, void *message_ptr),
isr_mbx_receive (OS_ID mailbox, void **message),
这些函数跟 os_**** 函数实现的效果一样,不同的是这些函数
只能在中断函数里使用,例如定时器中断函数 TIM2_IRQHandler 里面就应该使用
isr_**** 函数。
邮箱的运行原理:
1:消息其实是 指针 也就是变量(字符,整形,结构体 …… )的地址
例:定义一个整型变量 int message ; 则消息就是 &message
当其它任务得到这个消息后,就得到了 message 变量的指针,可以对 message 变
量进行读和写操作(写操作一般不使用)。
2:邮箱其实是数组(数组里面存储的消息都是指针)
例: os_mbx_declare 函数在 rtl.h 头文件有宏定义
假如调用 os_mbx_declare(mbx1, 3) 则邮箱就是 mbx1[7] 可以存储的消息是 3 个
为什么 7 个元素的数组只能存储 3 个消息???
数组的前 4 个元素被操作系统使用,用户能够存储消息的数组元素是 mbx[4]
mbx[5] mbx[6]
3:邮箱消息满之后,就无法再次向邮箱存储消息了。如果邮箱里消息满,任务函数却再
次调用 os_mbx_send 函数,则任务会将自己挂起
例: os_mbx_declare(mbx, 3) ,此时邮箱最多只能存储 3 个消息