[原创] 不进来看看吗!SMT32F红龙429_uCOS-II信号量例程下载

clmtc77   2016-10-10 14:31 楼主
/**********************************
** 红龙429开发板
** 实验名:-红龙429-uCOS信号量
** KEIL MDK-ARM Standard Version:V5.10
** 软件库(keil) Version: unused
** 固件库(ST) Version: 1.5.0
      
实验现象:    创建信号量之后,就已经存在一个信号量,所以在任务二中,有连续释放两个
          信号量,这时候任务 2 延时被挂起,任务一开始执行,获得三次信号量成功.随后
          再次获得信号量的时候,因为已经没有信号量了,所以任务 1 被挂起等待信号量,
          这时候,任务 2 延时结束,任务 2 开始运行,再次释放两个信号量,然后延时挂起,
    任务 1 开始运行,前两次获得信号量成功,最后一次获得信号量失败,因为任务 2
    只是释放了两个信号量.这里可以看到 OSSemAccept()函数在请求不到信号量的
    时候,是不会挂起任务等待信号量的,而是直接返回的.只有OSSemPend()
          函数才会在请求不到信号量的时候,把任务挂起,一直到获得信号量,或者超时返回.
            
/**
  * @file    main.c
  * @author  WB R&D Team - openmcu666
  * @version V0.1
  * @date    2016.2.29
  * @brief   Main Program body
  */
#include "UserTask.h"
extern OS_STK startup_task_stk[];//启动任务栈
void Delay(uint32_t Time)
{
    uint32_t i;
   
    i = 0;
    while (Time--)
  {
       for (i = 0; i < 5000; i++);
    }
}
/*****************************************************************************
**   Main Function  main()
******************************************************************************/
int main(void)
{
USART1_Init();
printf("\r\n");
printf("Hello Welcome.\r\n");
printf("Thank You For Choosing Our Products.\r\n");
printf("Thank You Very Much.\r\n");
printf("This Example is uCOS-II Semaphore.\r\n");
printf("\r\n");
printf("GPIO Initialization...\r\n");
  LED_Init();
SysTick_Init();
printf("Ok,Let's Go...\r\n");

  OSInit();
OSTaskCreate(Task_Start,                         //指向任务代码的指针      
    (void *)0,                                 //任务开始执行时,传递给任务的参数parg   
    &startup_task_stk[STARTUP_TASK_STK_SIZE-1],//分配给任务的堆栈的栈顶指针   
    STARTUP_TASK_PRIO);                        //分配给任务的优先级   
OSStart();                                       
return 0;
}



回复评论 (1)

嘿嘿 本帖最后由 没前途 于 2018-7-15 16:27 编辑
点赞  2018-7-15 11:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复