新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2022-6-19
- 在线时间
- 3 小时
|
2金钱
#include "system.h"
#include "SysTick.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
void PWM_GPIO(void); ////设置PB0推挽输出,用以检测看看灯亮不亮
/*********像这样我把main函数有关RTOS的API全都注释掉,至少能把灯点亮,串口也能发送111. *******************************************************************************************
**********但是如果我把main函数里有关RTOS的API的注释打开,那么灯也点不亮,串口也没数据,是压根没运行到main函数吗,(对了,我用静态创建任务的话是能够正常创建的,就是动态创建会这样)*****
***********************************************求助大佬求助大佬 ,是我遗漏了什么没设置好的参数吗****************************************************************************/
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
//任务优先级
#define LED1_TASK_PRIO 2
//任务堆栈大小
#define LED1_STK_SIZE 50
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
SysTick_Init(72);
PWM_GPIO();
USART_Configuration();
sendstring(USART1,"111");
GPIO_SetBits(GPIOB,GPIO_Pin_0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
//
// //创建开始任务
// xTaskCreate((TaskFunction_t )start_task, //任务函数
// (const char* )"start_task", //任务名称
// (uint16_t )START_STK_SIZE, //任务堆栈大小
// (void* )NULL, //传递给任务函数的参数
// (UBaseType_t )START_TASK_PRIO, //任务优先级
// (TaskHandle_t* )&StartTask_Handler); //任务句柄
// vTaskStartScheduler(); //开启任务调度
}
//开始任务任务函数
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //进入临界区
//创建LED1任务
xTaskCreate((TaskFunction_t )led1_task,
(const char* )"led1_task",
(uint16_t )LED1_STK_SIZE,
(void* )NULL,
(UBaseType_t )LED1_TASK_PRIO,
(TaskHandle_t* )&LED1Task_Handler);
vTaskDelete(StartTask_Handler); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//LED1任务函数
void led1_task(void *pvParameters)
{
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_0);
sendstring(USART1,"111");
vTaskDelay(800);
}
}
void PWM_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
|
|