初级会员

- 积分
- 80
- 金钱
- 80
- 注册时间
- 2016-3-3
- 在线时间
- 15 小时
|
1金钱
这是主函数
#include "includes.h"
/************************优先级定义**************************************/
/*#define task_start_prio 12*/
#define task_led_reset_prio 13
#define task_led_set_prio 14
/**********************堆栈大小定义**************************************/
#define task_led_reset_stack_size 500
static OS_STK task_led_reset_stack[task_led_reset_stack_size];
#define task_led_set_stack_size 500
static OS_STK task_led_set_stack[task_led_set_stack_size];
/*
#define task_start_stack_size 256u
static OS_STK task_start_stack[task_start_stack_size];
*/
/************************主函数******************************************/
int main(void)
{
HAL_Init();
gpio_init();
BSP_Init();
OSInit();
/* OSTaskCreate(task_start,(void *)0,(OS_STK *)&task_start_stack[task_start_stack_size-1],task_start_prio);*/
OSTaskCreate(task_led_set,(void *)0,(OS_STK *)&task_led_set_stack[task_led_set_stack_size-1],task_led_set_prio);
OSTaskCreate(task_led_reset,(void *)0,(OS_STK *)&task_led_reset_stack[task_led_reset_stack_size-1],task_led_reset_prio);
OSStart();
}
/***********************初始化外设**************************************/
void gpio_init(void)
{
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_Initstruct;
GPIO_Initstruct.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Initstruct.Pin=GPIO_PIN_13;
GPIO_Initstruct.Pull=GPIO_PULLUP;
GPIO_Initstruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_Initstruct);
}
/************************建立任务***************************************/
/*static void task_start (void *p_arg)
{
(void)p_arg;
OSTaskCreate(task_led_set,(void *)0,(OS_STK *)&task_led_set_stack[task_led_set_stack_size-1],task_led_set_prio);
OSTaskCreate(task_led_reset,(void *)0,(OS_STK *)&task_led_reset_stack[task_led_reset_stack_size-1],task_led_reset_prio);
while(1)
{
OSTimeDlyHMSM(1, 0,,0);
}
OSTimeDlyHMSM(1, 0,0,0);
}*/
void task_led_reset(void *p_arg)
{
(void)p_arg;
while (1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
OSTimeDlyHMSM(0, 0,1,0);
}
}
void task_led_set(void *p_arg)
{
(void)p_arg;
while (1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
OSTimeDlyHMSM(0, 0,1,0);
}
}
/**********************************************************************/
|
最佳答案
查看完整内容[请看2#楼]
出现现象的原因我已经解释了,可能讲的不够具体。
你用两个任务来做灯闪烁,你的两个任务在1s的延时到了之后就会运行优先级最高的任务(假设是灯亮),运行完之后会立即去运行优先级相对低的那个任务(假设是灯暗),然后又进入1s的延时,以此循环。那么你看到的现象永远是灯暗,因为灯还没来得及亮你就让它暗了。
看一点资料去理解一下使用RTOS系统的意义吧,你想控制一个灯以1s频率暗灭用一个任务就可以完成了为什么要用 ...
|