一:RTOS的介绍
RTOS 全称是 RealTime OperatingSystem,中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统。这里要注意,RTOS 不是指某一个确定的系统,而是指一类系统。、操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。、
RTOS 的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
二:测试调试官方的RTOS
官方提供了RTOS的驱动代码:
2.1初始化任务:
- /* Initialize the RTOS scheduler */
- osKernelInitialize();
- /* Create the thread */
- ledThreadID = osThreadNew(Led_Thread, NULL, &ledThreadattr);
- if (ledThreadID == NULL)
- {
- printf("Create led thread failed!\r\n");
- }
- usartThreadID = osThreadNew(Usart_TestThread, NULL, &usartThreadattr);
- if (usartThreadID == NULL)
- {
- printf("Create usart thread failed!\r\n");
- }
- /* Start the RTOS scheduler */
- osKernelStart();
2.2 :两个任务具体如下所示:
- /**
- * [url=/u/brief]@brief[/url] Led toggle task
- *
- * @param argument Not used
- *
- * @retval None
- */
- void Led_Thread(void *argument)
- {
- UNUSED(argument);
- while (1)
- {
- /* Toggle LED2 */
- BOARD_LED_Toggle(LED2);
- osDelay(500);
- }
- }
- /**
- * @brief Usart1 test task
- *
- * @param argument Not used
- *
- * @retval None
- */
- void Usart_TestThread(void *argument)
- {
- UNUSED(argument);
- while (1)
- {
- /* Print message */
- printf("Hello, world!Hello, APM32F402开发板!\r\n");
- osDelay(1000);
- }
- }
这里的时间基础貌似是0.1ms,使用串口监测串口发出来的数据如下所示:
感觉这里的系统的时基是有些误差的,等等再做深入的研究。
|