一,前言
之前自己玩stm32的时候二次开发了基于windows的带menuconfig窗口的gnu-arm构建系统,当时的makefile用了路径注入技术,支持动态配置编译。blog路径基于stm32f4的自制menuconfig及makefile工程--Apple的学习笔记。
现在正好有tricore内核基于hightec编译器,类似于gnu-arm的编译器,我们之前都用hightec IDE自带makefile。但是我要创造发明下,把它做成自制makefile,自动识别所有源文件进行编译。
二,自定义目标
1.为了节约每次增加模块文件夹要在配置中添加头文件路径的时间及通知其他同事的邮件时间,从而提高工作效率。
2.为了使用我为stm32制作的gun makefile构建系统框架,验证其可移植性及复用性。因为我理解只要改下编译参数就可以了。(在做可配置makefile前,我做的makefile框架就是不可配置,且能识别所有源文件路径进行编译的)
一个好的代码平台框架可以适用于不同项目,且能用10年。我理解makefile构建框架更是如此。若从stm32改成tc3xx很顺利的话,说明我的makefile构建系统框架还是很好用的。
三,修改方法
- cpu内核参数修改。
-
编译参数修改,最简单的方法就是从IDE中的配置项复制出编译参数,基于hightec安装包中的help文档基本看懂即可。
image.png - 基于gnu的lsl链接脚本看懂。
链接脚本有现成的,但是要结合编译器help看懂,顺便检查下链接文件是否正确。主要看usersguide.pdf的19.2 The Linker Script File章节即可。 -
上电冷启动后第一句执行的语句都需要从link脚本的中获取,关键字就是ENTRY
image.png
四,遇到的问题
1. map文件中变量的信息描述内容怎么少了
对比编译参数,我漏了一个-Wl,--extmap="a",帮助文件中搜索下了,原来是在map文件中添加扩展信息用的参数,自制makefile加入后,map文件效果一致了。
2. 在cmd窗口编译报错后,查找错误位置比较麻烦
直接在cmd界面运行make成功,然后我故意设置一个c语言错误。报错后查找对应c文件不方便。若有IDE编辑界面,直接双击就可以到达报错位置进行修改了。
解决方案:在highte中可以创建带自定义makefile的工程。就解决此问题了。用起来就像自动makefile是一样的。
image.png
3. 同样的代码自动makefile的工程编译速度比我自制makefile快
原因是我没添加-j 4多线程进行编译,但是cmd中make我可以加后缀-j 4,基于hightec的自制makefile如何添加呢?自己找了下,在如下编译配置界面设置即可,速度也一样了。完美~
image.png
五,小结
总的来说从stm32改成tc3xx的makefile还是很顺利的,说明我为stm32设计的makefile框架还是很好用的。本次又多学习了hightec中如何用自制的makefile工程,哈哈~学以致用,乐趣无穷。
网友评论