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);
}
}
|