
1 threadXThreadX 是一个实时操作系统(RTOS),由 Microsoft(微软)开发,专为嵌入式系统设计。ThreadX 以其高性能、低开销和易用性而闻名,广泛应用于各种嵌入式应用。 STM32C071 是一款基于 ARM Cortex-M0+ 内核的微控制器,适合多种RTOS开发,threadX和rtThread,FreeRTOS等都采用类似的逻辑,但是也有不同点。 2 创建工程和开发2.1 导入范例工程并编译通过。 核心代码入口在main.c,并启动线程
启动线程的核心代码,分别分配内存,堆栈,并启动线程
其中典型线程是一个点灯
2.2 ThreadX 线程创建应用说明 该应用提供了 Azure RTOS ThreadX 堆栈使用的示例,展示了如何使用 ThreadX 线程管理 API 开发应用程序。它演示了如何使用 Azure RTOS ThreadX API 创建和销毁多个线程。此外,它还展示了如何在线程之间使用抢占阈值和在运行时更改优先级。 在 ThreadX 内核启动期间,调用主要入口函数 tx_application_define()。在这个阶段,应用程序创建 3 个具有不同优先级的线程: MainThread (优先级:5;抢占阈值:5) ThreadOne (优先级:10;抢占阈值:9) ThreadTwo (优先级:10;抢占阈值:10) 启动后,MainThread 挂起并等待事件标志。 ThreadOne 开始每 500ms 切换一次 LED_GREEN,而 ThreadTwo 无法这样做,因为它的优先级低于 ThreadOne 的阈值。 5 秒后,它向 MainThread 发送事件 THREAD_ONE_EVT。 收到 THREAD_ONE_EVT 后,MainThread 将 ThreadTwo 的优先级更改为 8,并将其抢占阈值更改为 8,以使其大于 ThreadOne 的阈值,然后等待事件。 现在,ThreadTwo 可以抢占 ThreadOne,并在 5 秒内每 200ms 切换一次 LED_GREEN。完成后,它向 MainThread 发送 THREAD_TWO_EVT。 一旦收到 THREAD_TWO_EVT,MainThread 将 ThreadTwo 的优先级和抢占阈值重置为它们的原始值(10, 10),ThreadOne 重新调度,并重做上述场景。 重复上述序列 3 次后,MainThread 应销毁 ThreadOne 和 ThreadTwo,并每秒切换一次 LED_GREEN。 预期成功行为 LED_GREEN 每 500ms 切换一次,持续 5 秒 LED_GREEN 每 200ms 切换一次,持续 5 秒 成功状态(3 次后):LED_GREEN 每秒切换一次,持续 forever。 错误行为 失败时,错误消息将打印到串口,同时 LED_GREEN 熄灭。 3 演示及小结3.1 下载成功并正确启动运行 运行的结果是先快速闪灯,然后变化频率,最后经过3个循环后转换到持续的1秒闪灯的过程。 3.2 ThreadX 使用提示 ThreadX 使用 SysTick 作为时间基准,因此 HAL 必须通过 TIM IP 使用单独的时间基准。 ThreadX 在内核启动期间禁用所有中断以避免任何意外行为,因此所有系统相关调用(HAL、BSP)应要么在应用程序的开头执行,要么在线程入口函数内部执行。 ThreadX 提供了“tx_application_define()”函数,该函数由 tx_kernel_enter() API 自动调用。这个函数还可以在配置选项后启动一个内置的ASM汇编语言程序。这个是与其他的RTOS显著不同的点,基本没有提供这个来自底层代码的访问选择。 |
【STM32C0评测】低功耗状态电流测试
【STM32C0评测】自适应波特率UART回环
【STM32C0评测】NUCLEO-C092RC简要开箱测评——标准而立异的新一代低成本微控制器
【STM32C0评测】基于I2C驱动温度传感器
【STM32C0评测】基于模拟SPI驱动1.8寸tft屏
【STM32C0评测】使用ADC实现波形采集
【STM32C0评测】FreeRTOS测试
【STM32C0评测】串口输出ADC值
【STM32C0评测】PWM测试
【STM32C0评测】GPIO测试