[STM32F2]

UCOS使用信号量读取共享数据问题

[复制链接]
1084|4
手机看帖
扫描二维码
随时随地手机跟帖
luoliang1991|  楼主 | 2017-4-5 14:57 | 显示全部楼层 |阅读模式
各位大神好,我利用UCOS中的信号量实现共享数据的读取然后打印至串口,但是一直没有调通,其中我的任务在mytask.c中,麻烦大家看看问题出在哪里了?谢谢。


#include "main.h"

unsigned char share_resource[30];
OS_STK Stk_TaskStartUp[TASK_STARTUP_STK_SIZE];
OS_STK Stk_Task1_TaskTCB[TASK1_TEST_STK_SIZE];
OS_STK Stk_Task2_TaskTCB[TASK2_TEST_STK_SIZE];
OS_STK Stk_Task_LED3[TASK_TEST_LED3_STK_SIZE];
OS_STK Stk_Task_LED4[TASK_TEST_LED4_STK_SIZE];
extern OS_EVENT *My_EVENT;

void Task_StartUp(void *pdata)
{
        OS_CPU_SR cpu_sr;
        OS_ENTER_CRITICAL();
        My_EVENT=OSSemCreate(1);
        OSTaskCreate(Task1_TaskTCB, (void *)0, &Stk_Task1_TaskTCB[TASK1_TEST_STK_SIZE-1], OS_USER_PRIO_GET(5));
        OSTaskCreate(Task2_TaskTCB, (void *)0, &Stk_Task2_TaskTCB[TASK2_TEST_STK_SIZE-1], OS_USER_PRIO_GET(6));
        OSTaskCreate(Task_LED2, (void *)0, &Stk_Task_LED3[TASK_TEST_LED3_STK_SIZE-1], OS_USER_PRIO_GET(7));
        OSTaskCreate(Task_LED3, (void *)0, &Stk_Task_LED4[TASK_TEST_LED4_STK_SIZE-1], OS_USER_PRIO_GET(8));
        OS_EXIT_CRITICAL();
//        OSTaskDel(OS_USER_PRIO_GET(4));
       
}

void Task1_TaskTCB(void *pdata)
{                 
        INT8U err;
        unsigned char task1_str[]="First task Running!";
        while(1)
        {
                printf("\r\n ÈÎÎñ1:\r\n");
                OSSemPend(My_EVENT,0,&err);
                printf("%s\r\n",err);
                memcpy(share_resource,task1_str,sizeof(task1_str));
                printf("%s\r\n",share_resource);
                OSSemPost(My_EVENT);
                GPIO_ToggleBits(LED1);
                OSTimeDlyHMSM(0, 0, 0, 1000);       
        }       
}

void Task2_TaskTCB(void *pdata)
{                 
          INT8U err;
        unsigned char task2_str[]="Second task Running!";
        while(1)
        {
                printf("\r\ÈÎÎñ2:\r\n");
                OSSemPend(My_EVENT,0,&err);
                printf("%s\r\n",err);
                memcpy(share_resource,task2_str,sizeof(task2_str));
                printf("%s\r\n",share_resource);
                OSSemPost(My_EVENT);               
          OSTimeDlyHMSM(0, 0, 0, 1000);
                GPIO_ToggleBits(LED2);
        }
}
void Task_LED2(void *pdata)
{                 
    while(1)
        {
                OSTimeDlyHMSM(0, 0, 0, 400);
                GPIO_ToggleBits(LED3);
        }
}

void Task_LED3(void *pdata)
{                 
    while(1)
        {
                OSTimeDlyHMSM(0, 0, 0, 400);
                GPIO_ToggleBits(LED4);
        }
}
[code]int main(void)
        {
                //³õʼ»¯°å×Ó
                SysTick_Configuration();
                BSP_GPIO_Configuration();
                USART1_Configuration(19200);
                NVIC_Configuration();
                OSInit();
                OSTaskCreate(        Task_StartUp,                                                                               
                                                (void *) 0,                                                                        
                                                (OS_STK *)&Stk_TaskStartUp[TASK_STARTUP_STK_SIZE - 1],       
                                                (INT8U) OS_USER_PRIO_GET(4));       
                OSTimeSet(0);
                OSStart();
                return 0;
        }
       
[/code]
luoliang1991|  楼主 | 2017-4-5 15:00 | 显示全部楼层
其中OS_SEM_EN已经打开了

使用特权

评论回复
uiint| | 2017-4-5 22:26 | 显示全部楼层
不同的任务如果使用共享资源,可能会出错。

使用特权

评论回复
uiint| | 2017-4-5 22:30 | 显示全部楼层
uCOS的信号量,互斥锁等

使用特权

评论回复
mmuuss586| | 2017-4-6 08:22 | 显示全部楼层
用的ucos多少啊?
可以参考正点原子的例程;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝