FreeRtos学习中疑惑

📅 发布时间:2026/7/7 6:09:13 👁️ 浏览次数:
FreeRtos学习中疑惑
1.滴答定时器如何和freertos联系起来需要做什么配置联系任务调度器开始后有默认初始化滴答定时器根据configCPU_CLOCK_HZconfigTICK_RATE_HZ配置port函数有初始化函数和中断定时器vPortSetupTimerInterruptxPortSysTickHandler。配置只需要在freertosconfig函数增加中断映射宏定义填写滴答定时器节拍次数。#define configCPU_CLOCK_HZ SystemCoreClock /* 定义CPU主频, 单位: Hz, 无默认需定义 */#define xPortSysTickHandler SysTick_Handler#define configTICK_RATE_HZ 1000 /* 定义系统时钟节拍频率, 单位: Hz, 无默认需定义 */2.现象调试时程序可能停在反汇编窗口的BKPT 0xAB或SWI指令上,卡在systemlnit都没进去。这是ARM开发中非常常见的一个“坑”。当你使用了printf等标准I/O函数但目标硬件上并没有连接调试器来响应这些函数的请求时程序在启动阶段就会陷入死循环。方法A推荐使用微库Microlib。在Options for Target→Target选项卡中勾选Use MicroLIB。MicroLIB是Keil提供的一个针对深度嵌入式应用的精简库它默认关闭了半主机功能3.led长脚长引脚为正极短引脚为负极。如果1为亮0为灭。长脚接io口短脚接—级。4.记录一次因为按键按一次两次进入删除任务并且删除任务后句柄未赋值为NULL导致的死机/* 删除任务时永远先检查再置NULL */ if(task1_handler ! NULL) { vTaskDelete(task1_handler); task1_handler NULL; }5.如果在中断程序中调用freertos的中断API如何配置NVIC优先级大多数系统的默认配置都是所需要的 STM32 驱动器库除外。如果使用的是带有 STM32 驱动程序库的 STM32 则在启动 RTOS 之前通过 调用 NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 )确保将所有优先级位分配为抢占式优先级位。以 FromISR 结尾的 FreeRTOS 函数是中断安全的但前提是 调用这些函数的中断的逻辑优先级不高于 configMAX_SYSCALL_INTERRUPT_PRIORITY 定义的优先级configMAX_SYSCALL_INTERRUPT_PRIORITY 在 FreeRTOSConfig.h 头文件中定义。 因此对于任何使用一个 RTOS API 函数的中断服务程序 必须为其手动设置为一个数值优先级这个值必须等于或大于 configMAX_SYSCALL_INTERRUPT_PRIORITY 设定 的值。这确保了中断的逻辑优先级等于或小于 configMAX_SYSCALL_INTRUPT_PRIORITY 设置。Cortex-M 中断的默认数值优先级为 0。0 是最高的 优先级。因此切勿将使用中断安全 RTOS API 的中断的优先级设置为默认值6.验证定时器时间是否设置准确。中断函数中除了led翻转不要加其它代码print函数尤其占用时间无法准确测量时间。计算时间公式。FSYSTME/(Prescaler 1)/(Period 1)T1/F7.portDISABLE_INTERRUPTS()之后运行阻塞函数 vTaskDelay(pdMS_TO_TICKS(500))会导致关中断失效。vTaskDelay函数底层有开中断操作8.printf函数占用时间和波特率有关115200会快。用逻辑分析仪看时间打在main函数防止任务调度。9.死延时NOP函数要用逻辑分析仪调一下准度10.CUBMXApplication/User/Hardware 工程这样写不会被CUBX删除