为了这个移植,国庆都没有好好出去玩,在公司里弄这个移植,因为公司开发的工具是IAR(32K限制版的,没有版权的,编译FreeRTOS还是搓搓有余的~),在网上下载了移植实例,但都是用Keil编译的,我也是无奈,要是这样的话,我也就不用费心了,本想把Keil的文件一直到IAR当中,可是编译是通过了,可是怎么就是不行,我估计就是两个编译器软件里面有很多集成的功能的不同把,于是我放弃了这条路,试试官网的Demo,在Demo的基础上改改,应该可以吧,弄了好久,今天终于移植成功,特此记录一下。
在FreeRTOS官网下载FreeRTOSV7.1.0版本的,免费的!压缩版很小的,解压出来倒是挺大的,看来这个解压工具(7zip)还是真厉害!解压出来的文件当中有一个Demo文件,里面就是FreeRTOS在各种处理器上不同的编译器上编译的例子,于是我选择CORTEX_STM32F103_IAR这个文件,同时做了个备份,以免改了不成功,还有原来的。
这里我copy了一份,改名为DQ_CORTEX_STM32F103_IAR,因为我的STM32的板子是DQ的,下面是我的工程的结构,先看看。这里Utilities的文件时我自己添加的,里面的文件是我参考Keil的,和编译器没有什么关系的,都是C语言的,所以我就改了改拿过来用了,有C语言基础的一般能看懂,其实我的水平也不咋地~~还是原来作者写的好多了。
改好之后,记得在IAR-EWAM的工程里添加两个C文件,这里我截个图吧,还有在工程的Options…里添加额外的头文件目录。箭头的就是所加的路径,那样编译器就可以找到了,(题外话:其实这是IDE工具帮我们完成了很多事情,其实在Linux里有个makefile的,makefile的编写也是要加头文件路径的,具体的可以参考《和我一起写makefile》,那里,你可以学到很多有关编译的知识,当然,也只是皮毛罢了,写GCC的那个Richard Matthew Stallman才是牛人!)。
首先选择你的处理器,我选的是stm32f10xxc。
然后再Defined Symbols额外的添加两个宏定义,STM32F10X_HD 和USE_STDPERIPH_DRIVER,后来验证,不加也是可以的,因为这两个实在固件库3.5.0时我加的,因为在固件库3.5.0是的头文件是只读的,又因为STM32F103VCT6是256KFlash的,属于high density型的。
工程目录如下:
然后再Linker选项里的Override Default打上勾,默认是选择编译器的generic_cortex.icf的,这里我们选择之后,添加STM32F10x_FLASH.icf文件,这个STM32F10x_FLASH.icf是在我们新版本的固件库的目录下,具体是STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar,可以拷贝到当前的工程目录下,
调试器选择ST-LINK,模式为JTAG,然后编译。
Note:FreeRTOS的工程使用的早期的stm32的固件库的,2006年的!我晕了,都12年了,怎么就不更新呢?v7.2.0的demo里也是老的固件库,估计是稳定吧,这里要懂得修改了。还有移植FreeRTOS的时候,不要忘了添加mammap的heap_2.c的文件,把它从FreeRTOSV710\Source\portable\MemMang拷贝到你的source目录下,
点击download and debug之后全速运行,就有LED闪烁了。很高兴啊!
最后我附上工程文件,各位网友可以参考,不对的地方欢迎指正!娘的csdn居然上传不了!
下载请到http://bbs.21ic.com/frame.php?frameon=yes&referer=http%3A//bbs.21ic.com/icnewest.html