我使用的是STM32F103VB,弄了一晚上终于把系统跑起来了,现在把建立过程记录一下,并且大概说明一下这些文件的内容。
从官网注册之后,下载了整个FreeRTOSV7.4.2,其中包含了许多demo,各种芯片各种环境下,并且文档里对文件的组织写的比较明确,不过由于我习惯在最新的的V3.5.0的官方固件库,直接在官方的CM3的DEMO中包含需要不少改动,与其弄明白官方DEMO的组织,不如直接重新组织一个要简单得多:
1首先应该先有一个基于st公司V3.5.0的官方库建立一个编译链接都通过并且可以生成目标文件下到32里面的工程,这里不再赘述。
2然后先把FreeRTOSV7.4.2\FreeRTOS\Source下的源文件croutine.c、list.c、queue.c、tasks.c文件先直接copy过来添加,这些是freertos不需要修改的系统文件,这个目录下还有一个timers.c文件,也没有找到说明他的文档,并且删除了对MDK下32用的DEMO也可以编译通过,看本身的介绍也没有看明白,即使他自己还说“ This file is part of the FreeRTOS distribution.”....所以这里先放着他不管。
3把这个目录下的include文件夹也复制包含进来,这里面是freertos的系统头文件。
4接着把FreeRTOSV7.4.2\FreeRTOS\Source\portable\RVDS\ARM_CM3下的文件port.c和portmacro.h都考过来并且添加和包含,这两个文件是在cm3下实现的一些系统需要的底层细节,将来移植到新的芯片上就要手动实现这些了。
5,FreeRTOSV7.4.2\FreeRTOS\Source\portable\MemMang下面有四个heap_x.c,这些是freertos提供的实现内存管理的四种机制,每一个都有所不同,根据需要复制添加过来一个就行了,demo里面用的heap_2.c那我也先用这个。
6,把demo里面工程目录下的FreeRTOSConfig.h复制过来,这里面是系统设置的配置文件,暂时直接用原来的配置。
7,上面文件都添加包含好之后,在自己的工程主函数所在文件里面包含 "FreeRTOS.h" "task.h" "queue.h"这几个文件,然后主函数xTaskCreate建个任务再调用vTaskStartScheduler();启动调度器。
不过这时候如果用的原来官方固件库里面的启动文件startup_stm32f10x_md.s就会有一些问题,乃至导致一些HardFault_Handler等错误,对比了下demo里面的启动文件STM32F10X.s,发现主要是引用了几个外部的中断服务,
IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
IMPORT vUARTInterruptHandler
IMPORT vTimer2IntHandler
并且下面分配的终端名称也有所不同,另外堆栈的空间分配也不一样,为了省事直接copy过来整个启动文件,不过原来官方固件库推荐的额外使用一个SystemInit函数,
所以再在; Reset handler下面替换回下面就可以了:
Reset_Handler   ROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
另外原来建的固件库工程里面CM3核的CMSIS标准的外设访问层文件core_cm.c可以维持原样。
上面文件该包含的包含路径该添加的添加了,,工程设置也没有什么特别需要修改的,编译连接然后下载就可以运行了。
最后上传一张我的文件组织目录:
|