[资料分享]CodeWarrior工程移植到KDS环境
如题 ,来自苏州大学的资料。“CodeWarrior工程移植到Kinetis Design Studio环境简明教程”,手把手教你如何把CodeWarrior工程移植到Kinetis Design Studio环境 。
文章在附件里面。 占个沙发,兄台头像好欢乐啊~ 最近移植类的资料好多啊 zhangchaoying 发表于 2014-12-14 17:47
占个沙发,兄台头像好欢乐啊~
好多网友都这么说哦 ! 还有说卡哇伊的 CodeWarrior工程移植到Kinetis Design Studio环境简明教程
1.移植步骤
1.1 KW01(NOS&MQXLite)
1.在CW中打开需要移植的工程,然后打开KDS,新建一个KL26工程,步骤与CW中的类似:
File-->New-->Kinetis Dsign Studio Project,输入工程名(Project Name),选择芯片类型MKL26Z128xxx4,完成(Finish)
2.删除KDS工程目录中自动生成的“Project Settings”及“Source”文件夹(包括里面的文件),将需移植的CW工程目录中所有文件(除FLASH文件夹外)拷贝到KDS工程目录中
3.将CW工程中所包含的文件路径及相关的工程设置添加到KDS工程中
1)在工程目录窗口中选中相应工程(CW与KDS中同时进行),在鼠标右键弹出菜单中选择Properties(或选择Project菜单中的Properties)进入工程属性设置,进入C/C++Build-->Settings-->Tool Settings选项卡,在Warnings中勾选Enable all common warnings(-Wall)
2)将CW工程设置中的相应内容拷贝到KDS的工程设置中
CW KDS
ARM Ltd Windows GCC Assembler---->Cross ARM GNU Assembler
ARM Ltd Windows GCC C Compiler---->Cross ARM C Complier
ARM Ltd Windows GCC C Linker---->Cross ARM C++ Linker
每项中需复制的具体内容如下:
Assembler:
Directories(KDS中为Includes)中的Include paths
Miscellaneous中的Other flags(KDS中为Other assembler flags)
Compiler:
Directories(KDS中为Includes)中的Include paths
(将KDS中的默认添加路径删除,且不复制CW工程中以${MCUToolsBaseDir}开头的路径)
Miscellaneous中的Other flags(KDS中为Other compiler flags)
KDS中Optimization里的Language standard改为Toolchain defaullt(GNU ISO C90)
Linker:
General中的Script files(需注意,此处的文件路径必须用英文的""加以修饰)
Libraries中的Libraries(删除KDS中Libraries->Library search path里的原有内容)
Miscellaneous中的Other flags(KDS中为Other linker flags)
3) 进入C/C++Build-->Settings-->Toolchains选项卡,勾选Create flash image及Create extended listing,使得编译后生成hex及lst文件
1.2 KL25(NOS&MQXLite)
在KDS中新建工程时,选择的芯片类型为MKL25Z128xxx4。此外,在将CW工程设置拷贝到KDS的工程中时,需在Linker->Libraries的Libraries中添加“gcc”(无双引号),表示链接时加入gcc库。其他的移植步骤都与KW01中的一样。
1.3 K60(MQX)
1.在CW中打开需要移植的工程,然后打开KDS,新建一个K60工程,步骤与CW中的类似:
File-->New-->Kinetis Dsign Studio Project,输入工程名(Project Name),选择芯片类型MK60DN512Zxxx10,完成(Finish)
2.删除KDS工程目录中自动生成的“Project Settings”及“Source”文件夹(包括里面的文件),将需移植的CW工程目录中所有文件(除FLASH文件夹外)拷贝到KDS工程目录中
3.将CW工程中所包含的文件路径及相关的工程设置添加到KDS工程中:
1)在工程目录窗口中选中相应工程(CW与KDS中同时进行),在鼠标右键弹出菜单中选择Properties(或选择Project菜单中的Properties)进入工程属性设置,
进入C/C++Build-->Settings-->Tool Settings选项卡
2)将CW工程设置中的相应内容拷贝到KDS的工程设置中
CW KDS
ARM Ltd Windows GCC Assembler---->Cross ARM GNU Assembler
ARM Ltd Windows GCC C Compiler---->Cross ARM C Complier
ARM Ltd Windows GCC C Linker---->Cross ARM C++ Linker
每项中需复制的具体内容如下:
Assembler:
Preprocessor中的Defined symbols
Directories(KDS中为Includes)中的Include paths
Miscellaneous中的Other flags(KDS中为Other assembler flags)
Compiler:
Preprocessor中的Defined symbols
Directories(KDS中为Includes)中的Include paths
Miscellaneous中的Other flags(KDS中为Other compiler flags)
KDS中Optimization里的Language standard改为Toolchain defaullt(GNU ISO C90)
Linker:
General中的Script files(需注意,此处的文件路径必须用英文的""加以修饰)
Libraries中的Libraries(在KDS中,不添加CW工程中的两个库“rt”及“c++”)
3)打开工程中03_MCU文件夹下的startup.c文件
(1)将文件头尾两处的_EWL_BEGIN_EXTERN_C及_EWL_END_EXTERN_C注释掉
(2)将以下语句注释掉:
文件开头部分:
extern void __copy_rom_sections_to_ram(void);
extern char __S_romp[];
void __thumb_startup(void)函数里:
__call_static_initializers();
__init_user();
(3)将以下语句添加到void __thumb_startup(void)函数之前:
/* format of the ROM table info entry ... */
typedef struct RomInfo
{
unsigned long Source;
unsigned long Target;
unsigned long Size;
} RomInfo;
extern RomInfo __S_romp[] __attribute__((weak)); /* linker defined symbol */
/*
* Routine to flush cache follow the ROM to RAM copy
*/
void __flush_cache(unsigned long dst, unsigned long size)
{
//TBD
}
/*
*Routine to copy a single section from ROM to RAM ...
*/
void __copy_rom_section(unsigned long dst, unsigned long src, unsigned long size)
{
unsigned long len = size;
const int size_int = s
const int mask_int = sizeof(int)-1;
const int size_short = sizeof(short);
const int mask_short = sizeof(short)-1;
const int size_char = sizeof(char);
if( dst == src || size == 0)
{
return;
}
while( len > 0)
{
if( !(src & mask_int) && !(dst & mask_int) && len >= size_int)
{
*((int *)dst)= *((int*)src);
dst += size_int;
src += size_int;
len -= size_int;
}
else if( !(src & mask_short) && !(dst & mask_short) && len >= size_short)
{
*((short *)dst)= *((short*)src);
dst += size_short;
src += size_short;
len -= size_short;
}
else
{
*((char *)dst)= *((char*)src);
dst += size_char;
src += size_char;
len -= size_char;
}
}
}
/*
*Routine that copies all sections the user marked as ROM into
*their target RAM addresses ...
*
*__S_romp is defined in the linker command file
* It is a table of RomInfo
*structures.The final entry in the table has all-zero
*fields.
*/
void __copy_rom_sections_to_ram(void)
{
int index;
if (__S_romp == 0L) return;
/*
*Go through the entire table, copying sections from ROM to RAM.
*/
for (index = 0;
__S_romp.Source != 0 ||__S_romp.Target != 0 ||__S_romp.Size != 0; ++index)
{
__copy_rom_section( __S_romp.Target, __S_romp.Source, __S_romp.Size );
__flush_cache( __S_romp.Target, __S_romp.Size);
}
}
4)打开工程中07_Soft_Component文件夹下的common.h文件,将#include <null.h>替换成如下代码:
#ifndef NULL
#define NULL 0L
#endif
2.已知问题
1)在编译MQXLite工程时会提示报错,但不影响机器码生成
在编译MQXLite工程时会出现以下错误:
writing to APSR without specifying a bitmask is deprecated dispatch.S /KW01_MQXLite/09_MQXLite/psp/cortex_m/core/M0 line 276 C/C++ Problem
这是KDS测试版的bug,可以忽略,不影响最终生成elf及hex文件。 才几十K,下载太麻烦,直接贴出来了。教程的是KL25和K60移植程序。
感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。 谢谢楼主分享 lzl000 发表于 2014-12-14 17:51
最近移植类的资料好多啊
是啊 ,主要原因是飞思卡尔的自己的编译环境就有两种CW 和KDS ,还有IAR ,MDK 。所以工程之间转换值得去研究 。 qs6361036 发表于 2014-12-14 18:40
是啊 ,主要原因是飞思卡尔的自己的编译环境就有两种CW 和KDS ,还有IAR ,MDK 。所以工程之间转换值得去 ...
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号 lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号
应该需要更新的编译器啊,很多新出的片子都还没更新呢 zhangchaoying 发表于 2014-12-14 18:12
CodeWarrior工程移植到Kinetis Design Studio环境简明教程
1.移植步骤
1.1 KW01(NOS&MQXLite)
这么长,有点复杂啊 浪里白条 发表于 2014-12-14 18:29
感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。
明智的选择 ,现在用KDS的还是很少 ,不着急的话可以等着资料成熟了再来使用 。 lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号
目前还没用到K60 和K64 ,Keil 5以上版本是可以支持K60 ,K64是否支持就不知道啦! 对于新手来说,在kds、iar、keil中选一个就可以了。 我是小白我选Keil,熟悉,而且看代码比较方便。 这个资料有搞个演示工程就更好了 qs6361036 发表于 2014-12-14 19:05
目前还没用到K60 和K64 ,Keil 5以上版本是可以支持K60 ,K64是否支持就不知道啦! ...
。。。难道一定要用kds了吗 lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗
这个问题只能等飞思卡尔的 FAE来回答啦 ,兄弟你已经用上K64啦 ? qs6361036 发表于 2014-12-14 20:11
这个问题只能等飞思卡尔的 FAE来回答啦 ,兄弟你已经用上K64啦 ?
飞币兑换的板子是k64芯片 lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗
KDS是肯定支持的 ,我正好安装了一个KDS , 截个图给你看看 。 lzl000 发表于 2014-12-14 20:11
飞币兑换的板子是k64芯片
哇 ,这么高级的芯片啊 !我一直以为是K60的 qs6361036 发表于 2014-12-14 20:17
KDS是肯定支持的 ,我正好安装了一个KDS , 截个图给你看看 。
官方的肯定支持,但个人还是喜欢keil和iar。想当初stvd弄stm8各种坑 qs6361036 发表于 2014-12-14 20:19
哇 ,这么高级的芯片啊 !我一直以为是K60的
那是,飞思卡尔的赠品很超值的 lzl000 发表于 2014-12-14 20:19
官方的肯定支持,但个人还是喜欢keil和iar。想当初stvd弄stm8各种坑
同感 ,估计大家都喜欢keil 和 IAR , 支持的芯片比较全 。
俺是进来学习的 qs6361036 发表于 2014-12-14 20:29
同感 ,估计大家都喜欢keil 和 IAR , 支持的芯片比较全 。
主要是这两个千锤百炼,水火不侵。芯片公司的编译器则很容易有各种bug啊 lzl000 发表于 2014-12-14 20:43
主要是这两个千锤百炼,水火不侵。芯片公司的编译器则很容易有各种bug啊 ...
尤其是keil MDK ,被ARM公司收购后 ,只要是ARM公司的核 ,一般都支持 。即使现在不支持 ,估计过段时间会支持K64的。 谢谢楼主分享 其实他们俩还是有细微区别的 秦天 发表于 2014-12-15 09:10
其实他们俩还是有细微区别的
差别肯定是有的 !
页:
[1]