源文件:
https://github.com/wangsanhust/STM32F429_Discovery_FreeRTOS_9/blob/master/Projects/Demo1/main.c
分析int main(void)程序构成:
int main(void) { 1.Hardware_Init(); //硬件初始化,本例中GPIO的使能、输出方式、输出速度、等。 2.vTraceEnable(TRC_INIT); //Trace初始化 vTraceEnable(TRC_START); //Trace开启 Trace是什么?功能? ??? 留 4.xTaskCreate(); //创建任务1,指向一个无限循环函数ToggleLED1_Task,设置优先级3); xTaskCreate(); //创建任务2,指向一个无限循环函数ToggleLED2_Task,设置优先级2)。 4.vTaskStartScheduler(); //开始任务调度。 5.for( ; ; ); //??? }
分析void ToggleLED1_Task(void *pvParameters)函数:
void ToggleLED1_Task(void *pvParameters) //toggle 触发器 { int led = 0; //设一个灯的状态量 while (1) { if(led == 0) { Red_LED_On(); led = 1; } else { Red_LED_Off(); led = 0; } vTaskDelay(1000 / portTICK_RATE_MS); //灯的状态改变一次延时1000ms } }
分析void Red_LED_On(void)、void Red_LED_Off(void)
void Red_LED_On(void) { // GPIO_SetBits(GPIOG, GPIO_Pin_14); GPIOG->ODR |= 0x4000; //按位 或 ,使某位置一,不改变其他位。0x4000即 0100 0000 0000 0000 (“1”使14位变为1) } void Red_LED_Off(void) { // GPIO_ResetBits(GPIOG, GPIO_Pin_14); GPIOG->ODR &= 0xBFFF; //按位 与 ,使某位清零,不改变其他位。0xBFFF即 1011 1111 1111 1111 (“0”使14位变为0) } //对GPG的数据寄存器里的GPG14置一或清零,以使该口输出1(亮)或0(灭)。