qs6361036 发表于 2014-12-14 17:31:39

[资料分享]CodeWarrior工程移植到KDS环境

如题 ,来自苏州大学的资料。
“CodeWarrior工程移植到Kinetis Design Studio环境简明教程”,手把手教你如何把CodeWarrior工程移植到Kinetis Design Studio环境 。
文章在附件里面。

zhangchaoying 发表于 2014-12-14 17:47:04

占个沙发,兄台头像好欢乐啊~

lzl000 发表于 2014-12-14 17:51:11

最近移植类的资料好多啊

qs6361036 发表于 2014-12-14 17:59:45

zhangchaoying 发表于 2014-12-14 17:47
占个沙发,兄台头像好欢乐啊~

好多网友都这么说哦 ! 还有说卡哇伊的

zhangchaoying 发表于 2014-12-14 18:12:58

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文件。

zhangchaoying 发表于 2014-12-14 18:16:46

才几十K,下载太麻烦,直接贴出来了。教程的是KL25和K60移植程序。

浪里白条 发表于 2014-12-14 18:29:00

感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。

eliterxzgxu 发表于 2014-12-14 18:32:26

谢谢楼主分享

qs6361036 发表于 2014-12-14 18:40:29

lzl000 发表于 2014-12-14 17:51
最近移植类的资料好多啊

是啊 ,主要原因是飞思卡尔的自己的编译环境就有两种CW 和KDS ,还有IAR ,MDK 。所以工程之间转换值得去研究 。

lzl000 发表于 2014-12-14 18:42:39

qs6361036 发表于 2014-12-14 18:40
是啊 ,主要原因是飞思卡尔的自己的编译环境就有两种CW 和KDS ,还有IAR ,MDK 。所以工程之间转换值得去 ...

k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号

xiexie943 发表于 2014-12-14 18:57:09

lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号

应该需要更新的编译器啊,很多新出的片子都还没更新呢

xiexie943 发表于 2014-12-14 18:59:15

zhangchaoying 发表于 2014-12-14 18:12
CodeWarrior工程移植到Kinetis Design Studio环境简明教程
1.移植步骤
1.1 KW01(NOS&MQXLite)


这么长,有点复杂啊

qs6361036 发表于 2014-12-14 19:02:28

浪里白条 发表于 2014-12-14 18:29
感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。

明智的选择 ,现在用KDS的还是很少 ,不着急的话可以等着资料成熟了再来使用 。

qs6361036 发表于 2014-12-14 19:05:24

lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号

目前还没用到K60 和K64 ,Keil 5以上版本是可以支持K60 ,K64是否支持就不知道啦!

fengyunyu 发表于 2014-12-14 19:16:46

对于新手来说,在kds、iar、keil中选一个就可以了。

zhangchaoying 发表于 2014-12-14 19:23:11

我是小白我选Keil,熟悉,而且看代码比较方便。

xianghaisha 发表于 2014-12-14 19:27:28

这个资料有搞个演示工程就更好了

lzl000 发表于 2014-12-14 20:07:01

qs6361036 发表于 2014-12-14 19:05
目前还没用到K60 和K64 ,Keil 5以上版本是可以支持K60 ,K64是否支持就不知道啦! ...

。。。难道一定要用kds了吗

qs6361036 发表于 2014-12-14 20:11:07

lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗

这个问题只能等飞思卡尔的 FAE来回答啦 ,兄弟你已经用上K64啦 ?

lzl000 发表于 2014-12-14 20:11:39

qs6361036 发表于 2014-12-14 20:11
这个问题只能等飞思卡尔的 FAE来回答啦 ,兄弟你已经用上K64啦 ?

飞币兑换的板子是k64芯片

qs6361036 发表于 2014-12-14 20:17:49

lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗

KDS是肯定支持的 ,我正好安装了一个KDS , 截个图给你看看 。

qs6361036 发表于 2014-12-14 20:19:34

lzl000 发表于 2014-12-14 20:11
飞币兑换的板子是k64芯片

哇 ,这么高级的芯片啊 !我一直以为是K60的

lzl000 发表于 2014-12-14 20:19:49

qs6361036 发表于 2014-12-14 20:17
KDS是肯定支持的 ,我正好安装了一个KDS , 截个图给你看看 。

官方的肯定支持,但个人还是喜欢keil和iar。想当初stvd弄stm8各种坑

lzl000 发表于 2014-12-14 20:21:37

qs6361036 发表于 2014-12-14 20:19
哇 ,这么高级的芯片啊 !我一直以为是K60的

那是,飞思卡尔的赠品很超值的

qs6361036 发表于 2014-12-14 20:29:48

lzl000 发表于 2014-12-14 20:19
官方的肯定支持,但个人还是喜欢keil和iar。想当初stvd弄stm8各种坑

同感 ,估计大家都喜欢keil 和 IAR , 支持的芯片比较全 。

hnywx 发表于 2014-12-14 20:42:09

俺是进来学习的

lzl000 发表于 2014-12-14 20:43:20

qs6361036 发表于 2014-12-14 20:29
同感 ,估计大家都喜欢keil 和 IAR , 支持的芯片比较全 。

主要是这两个千锤百炼,水火不侵。芯片公司的编译器则很容易有各种bug啊

qs6361036 发表于 2014-12-14 20:52:19

lzl000 发表于 2014-12-14 20:43
主要是这两个千锤百炼,水火不侵。芯片公司的编译器则很容易有各种bug啊 ...

尤其是keil MDK ,被ARM公司收购后 ,只要是ARM公司的核 ,一般都支持 。即使现在不支持 ,估计过段时间会支持K64的。

ab3504 发表于 2014-12-15 06:35:04

谢谢楼主分享

秦天 发表于 2014-12-15 09:10:43

其实他们俩还是有细微区别的

qs6361036 发表于 2015-1-10 21:18:45

秦天 发表于 2014-12-15 09:10
其实他们俩还是有细微区别的

差别肯定是有的 !
页: [1]
查看完整版本: [资料分享]CodeWarrior工程移植到KDS环境