搜索
bottom↓
回复: 30

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

[复制链接]

出0入0汤圆

发表于 2014-12-14 17:31:39 | 显示全部楼层 |阅读模式
如题 ,来自苏州大学的资料。
“CodeWarrior工程移植到Kinetis Design Studio环境简明教程”,手把手教你如何把CodeWarrior工程移植到Kinetis Design Studio环境 。
文章在附件里面。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-12-14 17:47:04 | 显示全部楼层
占个沙发,兄台头像好欢乐啊~

出0入0汤圆

发表于 2014-12-14 17:51:11 | 显示全部楼层
最近移植类的资料好多啊

出0入0汤圆

 楼主| 发表于 2014-12-14 17:59:45 | 显示全部楼层
zhangchaoying 发表于 2014-12-14 17:47
占个沙发,兄台头像好欢乐啊~

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

出0入0汤圆

发表于 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[index].Source != 0 ||__S_romp[index].Target != 0 ||__S_romp[index].Size != 0; ++index)
{
__copy_rom_section( __S_romp[index].Target, __S_romp[index].Source, __S_romp[index].Size );
__flush_cache( __S_romp[index].Target, __S_romp[index].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文件。

出0入0汤圆

发表于 2014-12-14 18:16:46 | 显示全部楼层
才几十K,下载太麻烦,直接贴出来了。教程的是KL25和K60移植程序。

出0入0汤圆

发表于 2014-12-14 18:29:00 | 显示全部楼层
感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。

出0入0汤圆

发表于 2014-12-14 18:32:26 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

 楼主| 发表于 2014-12-14 18:40:29 | 显示全部楼层
lzl000 发表于 2014-12-14 17:51
最近移植类的资料好多啊

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-12-14 18:57:09 | 显示全部楼层
lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号

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

出0入0汤圆

发表于 2014-12-14 18:59:15 | 显示全部楼层
zhangchaoying 发表于 2014-12-14 18:12
CodeWarrior工程移植到Kinetis Design Studio环境简明教程
1.移植步骤
1.1 KW01(NOS&MQXLite)

这么长,有点复杂啊

出0入0汤圆

 楼主| 发表于 2014-12-14 19:02:28 | 显示全部楼层
浪里白条 发表于 2014-12-14 18:29
感觉好复杂,还好最近没用飞思卡尔单片机了。等KDS资料多了再上手用。

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

出0入0汤圆

 楼主| 发表于 2014-12-14 19:05:24 | 显示全部楼层
lzl000 发表于 2014-12-14 18:42
k60的开发板主控是k64的,mdk和iar好像都没有这两种芯片的型号

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

出100入101汤圆

发表于 2014-12-14 19:16:46 | 显示全部楼层
对于新手来说,在kds、iar、keil中选一个就可以了。

出0入0汤圆

发表于 2014-12-14 19:23:11 | 显示全部楼层
我是小白我选Keil,熟悉,而且看代码比较方便。

出0入0汤圆

发表于 2014-12-14 19:27:28 | 显示全部楼层
这个资料有搞个演示工程就更好了

出0入0汤圆

发表于 2014-12-14 20:07:01 | 显示全部楼层
qs6361036 发表于 2014-12-14 19:05
目前还没用到K60 和K64 ,Keil 5以上版本是可以支持K60 ,K64是否支持就不知道啦  ! ...

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

出0入0汤圆

 楼主| 发表于 2014-12-14 20:11:07 | 显示全部楼层
lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗

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

出0入0汤圆

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

飞币兑换的板子是k64芯片

出0入0汤圆

 楼主| 发表于 2014-12-14 20:17:49 | 显示全部楼层
lzl000 发表于 2014-12-14 20:07
。。。难道一定要用kds了吗

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-12-14 20:19:34 | 显示全部楼层
lzl000 发表于 2014-12-14 20:11
飞币兑换的板子是k64芯片

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

出0入0汤圆

发表于 2014-12-14 20:19:49 | 显示全部楼层
qs6361036 发表于 2014-12-14 20:17
KDS是肯定支持的 ,我正好安装了一个KDS , 截个图给你看看 。

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

出0入0汤圆

发表于 2014-12-14 20:21:37 | 显示全部楼层
qs6361036 发表于 2014-12-14 20:19
哇 ,这么高级的芯片啊 !我一直以为是K60的

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

出0入0汤圆

 楼主| 发表于 2014-12-14 20:29:48 | 显示全部楼层
lzl000 发表于 2014-12-14 20:19
官方的肯定支持,但个人还是喜欢keil和iar。想当初stvd弄stm8各种坑

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

出0入10汤圆

发表于 2014-12-14 20:42:09 | 显示全部楼层
俺是进来学习的

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-12-15 06:35:04 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-12-15 09:10:43 | 显示全部楼层
其实他们俩还是有细微区别的  

出0入0汤圆

 楼主| 发表于 2015-1-10 21:18:45 | 显示全部楼层
秦天 发表于 2014-12-15 09:10
其实他们俩还是有细微区别的

差别肯定是有的 !
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 07:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表