mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 19:39:42 +08:00
80
Demo-Service/重入访问/reent_semaph.c
Normal file
80
Demo-Service/重入访问/reent_semaph.c
Normal file
@@ -0,0 +1,80 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III 例程(服务应用)
|
||||
* @file reent_semaph.c
|
||||
* @brief 重入访问_计数信号量
|
||||
* @details 通过计数信号量的{获取<-归还},实现在任务中对任务级可重入资源的重入访问。
|
||||
* @note 可实现超时处理机制。
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.0
|
||||
* @date 2025.10.25
|
||||
******************************************************************************/
|
||||
|
||||
#if 1 /* 编译开关 */
|
||||
|
||||
#include "CosyOS.H"
|
||||
|
||||
uCreateSem(sem_0, 2, 2); // 创建计数信号量,用于重入访问,初始值=最大值=资源数量
|
||||
|
||||
/* task_1 */
|
||||
uCreateTask(task_1, 1, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
if(uTakeSem(sem_0, xTick_ms(500))){ // 如果超时时间为~0,不再支持超时处理
|
||||
/* 重入访问 任务级可重入资源 开始 */
|
||||
|
||||
/* 重入访问 任务级可重入资源 结束 */
|
||||
uBackSem(sem_0);
|
||||
}
|
||||
else{
|
||||
/* 超时处理 开始 */
|
||||
|
||||
/* 超时处理 结束 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* task_2 */
|
||||
uCreateTask(task_2, 2, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
if(uTakeSem(sem_0, xTick_ms(500))){ // 如果超时时间为~0,不再支持超时处理
|
||||
/* 重入访问 任务级可重入资源 开始 */
|
||||
|
||||
/* 重入访问 任务级可重入资源 结束 */
|
||||
uBackSem(sem_0);
|
||||
}
|
||||
else{
|
||||
/* 超时处理 开始 */
|
||||
|
||||
/* 超时处理 结束 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* task_3 */
|
||||
uCreateTask(task_3, 3, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
if(uTakeSem(sem_0, xTick_ms(500))){ // 如果超时时间为~0,不再支持超时处理
|
||||
/* 重入访问 任务级可重入资源 开始 */
|
||||
|
||||
/* 重入访问 任务级可重入资源 结束 */
|
||||
uBackSem(sem_0);
|
||||
}
|
||||
else{
|
||||
/* 超时处理 开始 */
|
||||
|
||||
/* 超时处理 结束 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 启动钩子 */
|
||||
void start_hook(void)
|
||||
{
|
||||
uStartTask_Ready(task_1); // 启动task_1,初始状态为就绪状态
|
||||
uStartTask_Ready(task_2); // 启动task_2,初始状态为就绪状态
|
||||
uStartTask_Ready(task_3); // 启动task_3,初始状态为就绪状态
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user