mian函数 C代码的入口 初始化一些硬件后- osThreadDef(USER_Thread, StartThread, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
- osThreadCreate (osThread(USER_Thread), NULL);
- /* Start scheduler */
- osKernelStart(NULL, NULL);
定义了一个 线程 USER_Thread 然后启动OS
注意 osThreadDef 是一个宏 定义一个用于描述 线程的结构体 并不是执行函数
宏的第二项参数 StartThread 为线程 入口函数地址。
至此mian函数的工作结束了 OS将转向 就绪线程并永不返回 也就是执行StartThread
修改 StartThrea函数 如下
- /* USER CODE BEGIN 4 */
- void Nucleo_072_Led(const void *par);
- /* USER CODE END 4 */
- static void StartThread(void const * argument)
- {
- /* USER CODE BEGIN 5 */
- osThreadDef(LED_Thread, Nucleo_072_Led, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
- osThreadCreate (osThread(LED_Thread), NULL);
- /* Infinite loop */
- for(;;)
- {
- osDelay(1);
- }
- /* USER CODE END 5 */
- }
添加一个 LED 函数- void Nucleo_072_Led(const void *par)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- __GPIOA_CLK_ENABLE();
-
- GPIO_InitStruct.Pin = GPIO_PIN_5;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- for(;;)
- {
- GPIOA->ODR^=GPIO_PIN_5;// PA5取反 LED闪烁
- osDelay(500);
- }
- }
|