本帖最后由 聪聪哥哥 于 2026-2-2 09:03 编辑
一:RTOS的介绍
RTOS 全称是 RealTime OperatingSystem,中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统。这里要注意,RTOS 不是指某一个确定的系统,而是指一类系统。、操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。、
RTOS 的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
二:图形化配置:
这里为了方便演示,只是简单的创建了两个任务,看一下板载的LED闪烁的情况;
三:任务编写:
3.1 软件生成的任务
- void freertos_task_create(void)
- {
- /* create my_task01 task */
- xTaskCreate(my_task01_func,
- "my_task01",
- 128,
- NULL,
- 0,
- &my_task01_handle);
- /* create my_task02 task */
- xTaskCreate(my_task02_func,
- "my_task02",
- 128,
- NULL,
- 0,
- &my_task02_handle);
- }
3.2 编写任务1
- void my_task01_func(void *pvParameters)
- {
- /* add user code begin my_task01_func 0 */
- /* add user code end my_task01_func 0 */
- /* add user code begin my_task01_func 2 */
- /* add user code end my_task01_func 2 */
- /* Infinite loop */
- while(1)
- {
- /* add user code begin my_task01_func 1 */
- vTaskDelay(200);
- gpio_bits_toggle( GPIOD,GPIO_PINS_15);
- /* add user code end my_task01_func 1 */
- }
- }
3.2 编写任务2
- void my_task02_func(void *pvParameters)
- {
- /* add user code begin my_task02_func 0 */
- /* add user code end my_task02_func 0 */
- /* add user code begin my_task02_func 2 */
- /* add user code end my_task02_func 2 */
- /* Infinite loop */
- while(1)
- {
- /* add user code begin my_task02_func 1 */
- vTaskDelay(500);
- gpio_bits_toggle(GPIOD,GPIO_PINS_13 | GPIO_PINS_14 );
- /* add user code end my_task02_func 1 */
- }
- }
四:实物验证代码如下所示:
11RTOS_TEST.zip
(2.48 MB, 下载次数: 0)
|