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

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


  1. #include "main.h"

  2. unsigned char share_resource[30];
  3. OS_STK Stk_TaskStartUp[TASK_STARTUP_STK_SIZE];
  4. OS_STK Stk_Task1_TaskTCB[TASK1_TEST_STK_SIZE];
  5. OS_STK Stk_Task2_TaskTCB[TASK2_TEST_STK_SIZE];
  6. OS_STK Stk_Task_LED3[TASK_TEST_LED3_STK_SIZE];
  7. OS_STK Stk_Task_LED4[TASK_TEST_LED4_STK_SIZE];
  8. extern OS_EVENT *My_EVENT;

  9. void Task_StartUp(void *pdata)
  10. {
  11.         OS_CPU_SR cpu_sr;
  12.         OS_ENTER_CRITICAL();
  13.         My_EVENT=OSSemCreate(1);
  14.         OSTaskCreate(Task1_TaskTCB, (void *)0, &Stk_Task1_TaskTCB[TASK1_TEST_STK_SIZE-1], OS_USER_PRIO_GET(5));
  15.         OSTaskCreate(Task2_TaskTCB, (void *)0, &Stk_Task2_TaskTCB[TASK2_TEST_STK_SIZE-1], OS_USER_PRIO_GET(6));
  16.         OSTaskCreate(Task_LED2, (void *)0, &Stk_Task_LED3[TASK_TEST_LED3_STK_SIZE-1], OS_USER_PRIO_GET(7));
  17.         OSTaskCreate(Task_LED3, (void *)0, &Stk_Task_LED4[TASK_TEST_LED4_STK_SIZE-1], OS_USER_PRIO_GET(8));
  18.         OS_EXIT_CRITICAL();
  19. //        OSTaskDel(OS_USER_PRIO_GET(4));
  20.        
  21. }

  22. void Task1_TaskTCB(void *pdata)
  23. {                 
  24.         INT8U err;
  25.         unsigned char task1_str[]="First task Running!";
  26.         while(1)
  27.         {
  28.                 printf("\r\n ÈÎÎñ1:\r\n");
  29.                 OSSemPend(My_EVENT,0,&err);
  30.                 printf("%s\r\n",err);
  31.                 memcpy(share_resource,task1_str,sizeof(task1_str));
  32.                 printf("%s\r\n",share_resource);
  33.                 OSSemPost(My_EVENT);
  34.                 GPIO_ToggleBits(LED1);
  35.                 OSTimeDlyHMSM(0, 0, 0, 1000);       
  36.         }       
  37. }

  38. void Task2_TaskTCB(void *pdata)
  39. {                 
  40.           INT8U err;
  41.         unsigned char task2_str[]="Second task Running!";
  42.         while(1)
  43.         {
  44.                 printf("\r\ÈÎÎñ2:\r\n");
  45.                 OSSemPend(My_EVENT,0,&err);
  46.                 printf("%s\r\n",err);
  47.                 memcpy(share_resource,task2_str,sizeof(task2_str));
  48.                 printf("%s\r\n",share_resource);
  49.                 OSSemPost(My_EVENT);               
  50.           OSTimeDlyHMSM(0, 0, 0, 1000);
  51.                 GPIO_ToggleBits(LED2);
  52.         }
  53. }
  54. void Task_LED2(void *pdata)
  55. {                 
  56.     while(1)
  57.         {
  58.                 OSTimeDlyHMSM(0, 0, 0, 400);
  59.                 GPIO_ToggleBits(LED3);
  60.         }
  61. }

  62. void Task_LED3(void *pdata)
  63. {                 
  64.     while(1)
  65.         {
  66.                 OSTimeDlyHMSM(0, 0, 0, 400);
  67.                 GPIO_ToggleBits(LED4);
  68.         }
  69. }
  70. [code]int main(void)
  71.         {
  72.                 //³õʼ»¯°å×Ó
  73.                 SysTick_Configuration();
  74.                 BSP_GPIO_Configuration();
  75.                 USART1_Configuration(19200);
  76.                 NVIC_Configuration();
  77.                 OSInit();
  78.                 OSTaskCreate(        Task_StartUp,                                                                               
  79.                                                 (void *) 0,                                                                        
  80.                                                 (OS_STK *)&Stk_TaskStartUp[TASK_STARTUP_STK_SIZE - 1],       
  81.                                                 (INT8U) OS_USER_PRIO_GET(4));       
  82.                 OSTimeSet(0);
  83.                 OSStart();
  84.                 return 0;
  85.         }
  86.        
[/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

粉丝
快速回复 在线客服 返回列表 返回顶部