野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14213|回复: 5

μCOS-III的信号量创建失败问题

[复制链接]
发表于 2016-3-2 11:14:52 | 显示全部楼层 |阅读模式
本帖最后由 ALEX123 于 2016-3-2 11:17 编辑

各位大神,我今天刚学到信号量,写了一个小程序,建立两个任务,分别使两个小灯闪烁。我想创建一个信号量,我看到书上解释说OSSemCreate()函数中给OS_SEM_CTR这个参数赋的值就是信号量的初始值,我在程序中给它赋值为2,可是我用串口打印出sem_led1->Ctr的值是0呢?  是我这个函数的写法不对还是怎么回事?  在线等,急急急!!!!

#include "app.h"
#include "bsp.h"


OS_TCB LED1_TCB;
static        CPU_STK LED1_Stk[128];

OS_TCB LED2_TCB;
static        CPU_STK LED2_Stk[128];

OS_SEM *sem_led1;


int main(void)
{
        OS_ERR err;
       
        BSP_Init();
       
        OSInit(&err);
       
        OSSemCreate ((OS_SEM        *)sem_led1,
                                  (CPU_CHAR    *)"led1",
                                  (OS_SEM_CTR )2,
                                  (OS_ERR        *)&err);
       
        OSTaskCreate ((OS_TCB        *)&LED1_TCB,
                (CPU_CHAR      *)"LED1",
                (OS_TASK_PTR    )Task_LED1,
                (void          *)0,
                (OS_PRIO        )2,
                (CPU_STK       *)&LED1_Stk[0],
                (CPU_STK_SIZE   )12,
                (CPU_STK_SIZE   )128,
                (OS_MSG_QTY     )0,
                (OS_TICK        )0,
                (void          *)0,
                (OS_OPT         )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                (OS_ERR        *)&err);
                                                               
OSTaskCreate ((OS_TCB        *)&LED2_TCB,
                (CPU_CHAR      *)"LED2",
                (OS_TASK_PTR    )Task_LED2,
                (void          *)0,
                (OS_PRIO        )3,
                (CPU_STK       *)&LED2_Stk[0],
                (CPU_STK_SIZE   )12,
                (CPU_STK_SIZE   )128,
                (OS_MSG_QTY     )0,
                (OS_TICK        )0,
                (void          *)0,
                (OS_OPT         )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                (OS_ERR        *)&err);
                                                               
        printf("\r\n%d",sem_led1->Ctr);
       
        OSStart(&err);

}
回复

使用道具 举报

发表于 2016-3-2 13:42:11 | 显示全部楼层
看看ucos配置文件里有没有使能信号量功能
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-2 13:53:43 | 显示全部楼层
flyleaf 发表于 2016-3-2 13:42
看看ucos配置文件里有没有使能信号量功能

我在os_cfg.h文件里使能过了。打印出来的还是0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-2 20:08:49 | 显示全部楼层
flyleaf 发表于 2016-3-2 13:42
看看ucos配置文件里有没有使能信号量功能

我把创建时的err打印出来了,是24003    对应的宏也就是OS_ERR_OBJ_PTR_NULL         if 'p_sem'  is a NULL pointer      信号量指针怎么初始化呀
回复 支持 反对

使用道具 举报

发表于 2016-3-3 08:41:01 | 显示全部楼层
这样试试
OS_SEM sem_led1;



        OS_ERR err;
        
        BSP_Init();
        
        OSInit(&err);        
        OSSemCreate ((OS_SEM        *)&sem_led1,
                                  (CPU_CHAR    *)"led1",
                                  (OS_SEM_CTR )2,
                                  (OS_ERR        *)&err);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-6 14:09:20 | 显示全部楼层
是的   就是这个问题   好了   谢谢大神
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-9 02:43 , Processed in 0.039576 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表