4 应用实例 main函数为RT-Thread Nano的主线程,我们再创建于一个led线程。 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } static void led_thread_entry(void* parameter) { GPIO_Configuration(); for (;;) { GPIO_SetBits(GPIOB, GPIO_Pin_0); rt_thread_mdelay(500); GPIO_ResetBits(GPIOB, GPIO_Pin_0); rt_thread_mdelay(500); } } void led_thread_init(void) { static rt_uint8_t s_led_stack[256]; static struct rt_thread led_thread; rt_err_t result; result = rt_thread_init(&led_thread, "led", led_thread_entry, RT_NULL, (rt_uint8_t*)&s_led_stack[0], sizeof(s_led_stack), 7, 5); if (result == RT_EOK) { rt_thread_startup(&led_thread); } } 注意:
|
第五步:板级配置 这一步主要是板级CPU相关信息配置,源码文件位于board.c。我直接拷贝现有的STM32的工程board.c文件,几乎不用修改。
void rt_hw_board_init() { /* 配置中断向量表偏偏移地址 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x400); /* System Clock Update */ SystemCoreClockUpdate(); /* System Tick Configuration */ _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); /* Call components board initial (use INIT_BOARD_EXPORT()) */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); #endif }
/* 滴答定时器配置 */ static uint32_t _SysTick_Config(rt_uint32_t ticks) { if ((ticks - 1) > 0xFFFFFF) { return 1; } _SYSTICK_LOAD = ticks - 1; _SYSTICK_PRI = 0xFF; _SYSTICK_VAL = 0; _SYSTICK_CTRL = 0x07; return 0; } /* 时钟节拍中断函数 */ void SysTick_Handler(void) { /* enter interrupt */ rt_interrupt_enter(); rt_tick_increase(); /* leave interrupt */ rt_interrupt_leave(); } 至此,一个基本的RT-Thread Nano小系统工程移植完成。 |
3 STM32标准库移植 RT-Thread Nano移植非常简单,RT-Thread Nano已经支持常用CPU,相关启动文件已经提供,移植步骤也给出详细的描述文档,可以参考官方移植教程。对于Keil MDK的下移植,RT-Thread Nano 已集成在其IDE中,可以直接在 IDE 中进行下载添加,十分便捷,而且与使用何种库没有太多关系。本文主要描述IAR下的STM32标准库移植(其实差异也很小很小!)。 第一步:准备IAR工程和RT-Thread Nano源码
|
2 什么时候使用RT-Thread Nano 标准版RT-Thread包含了内核、设备驱动、第三方组件、packages等等,而且这些几乎都是开源的,通过“堆积木”的方式即可快速搭建一个基本项目小系统工程,但是带来的代价之一是增加资源(RAM、ROM)的消耗,一些资源比较紧张的CPU则需外扩RAM和ROM。RT-Thread Nano最大特点之一是“资源占用小”,基于资源不足的考虑,RT-Thread Nano是一个优异的选择。 使用RT-Thread Nano的场景参考建议:
RAM、ROM资源有限,而项目任务量比较多,必须使用RTOS,此时考虑使用RT-Thread Nano
只需一个调度内核,不需设备管理、第三方组件等外部资源,直接使用RT-Thread Nano,省去裁剪标准RTT时间
公司已存在一套出货量巨大的、稳定的设备驱动、组件,不需要使用RTT设备驱动和组件,此时建议使用RT-Thread Nano一个调度内核即可,复用已有的驱动、组件 |