|
背景:公司有个2006年老项目,方案是:stm32f103vet6 ,arm-none-eabi gcc 工具链 在linux环境下编译开发,而且使用了结构体访问寄存器的方案,example如下所示(c99),全部代码都用这种指针方式访问寄存器(估计是st最早的库吧?)- typedef struct {
- vu32
- ENABLE:1,
- TICKINT:1,
- :14,
- COUNTFLAG:1,
- :15;
- int r[4];
- vu32 RELOAD;
- vu32 CURRENT;
- vu32 TENMS;
- } SYSTICKREGS;
- extern SYSTICKREGS SYSTICK;
复制代码 工具链如下:
因现在业务需求要加很多新功能,任务多了f103有点吃不消,io口也不够,所以想把这套代码整体移植到性能高一点的平台,比如stm32f429等,但是目前主流做法都是基于keil平台,使用标准库或hal开发,我对keil不熟悉,所以造成了移植的很大难度。
整理一下移植需要做的内容及问题如下:
1.把所有对寄存器直接操作 替换成 使用标准库或者hal操作,初步估计有15000行代码,这种工作量是否太大?
2.对于某些依赖于gcc编译器的代码比如 eGlobal __attribute__((section(".runtime_globals"))) globals,这种代码将指定变量放到固定的目标文件自定义段的操作,还有将某些变量放到用户指定地址 ,这些在mdk中是否能实现?
3.老代码跑的是freertos4.xx 是否有必要替换成更新的版本?
4.目前代码编译后的bin大小在200k flash空间,如果采用库开发的话,会增加多少空间?
最后,对于老代码移植到新mcu,有没有更好的方案?求各位大佬给点建议,感激不尽。
|
|