RTThread的finsh在IAR 430上移植的可行性
2013-12-30 17:35
423 查看
RTThread的finsh是个好东西,如果想移植到IAR 430平台,是需要一些移植工作的,因为finsh需要重新定义一个section,然后把代码放入指定section;
那么我们来看看在IAR430平台下如何实现这些:
一,链接文件的修改:
以我用的msp430f1611为例,找到lnk430f1611.xcl拷贝一份,找到
// -------------------------------------
// Code
//
-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF
-P(CODE)CODE=4200-FFDE
然后修改成:
// -------------------------------------
// Code
//
-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF
-P(CODE)CODE=4200-FEFF
// add FSymTab section
-Z(CODE)FSymTab=FF00-FFDF
这样,我们定义了一个FSymTab段落。在IAR的options->linker->config里面选择linker configuratio file,改为我们修改过的;这里我们需要给出FSymTab一个固定的地址空间,与IAR ARM的根据函数自动给FSymTab段落定义空间大小有所区别,显得不够智能。
二,section段落的起始
在finsh_system_init函数内部,我们需要给出FSymTab段落的起始,可以查看IAR linker and library reference guide,找到section的起始与结束的宏:
/* enable IAR extensions, this is necessary to get __sfb and__sfe, it is of course possible to write this function in assembler instead */
我们采用
finsh_system_function_init(__sfb("FSymTab"),__sfe("FSymTab"));
三,代码的保留
在IAR ARM里面,我们在链接脚本里面加入了keep命令来保留section以及定义未使用的函数,在IAR 430默认配置对于定义未使用的函数只是编译但未链接;
我们需要加入__root指令来保留函数:
#define FINSH_FUNCTION_EXPORT(name, desc) \
const char __fsym_##name##_name[] = #name; \
__root const struct finsh_syscall __fsym_##name SECTION("FSymTab") = \
{ \
__fsym_##name##_name, \
(syscall_func)&name \
};
经过上面3个流程,我们就可以完成finsh在IAR 430上的底层移植,后续只需要修改OS的任务实现即可。
那么我们来看看在IAR430平台下如何实现这些:
一,链接文件的修改:
以我用的msp430f1611为例,找到lnk430f1611.xcl拷贝一份,找到
// -------------------------------------
// Code
//
-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF
-P(CODE)CODE=4200-FFDE
然后修改成:
// -------------------------------------
// Code
//
-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF
-P(CODE)CODE=4200-FEFF
// add FSymTab section
-Z(CODE)FSymTab=FF00-FFDF
这样,我们定义了一个FSymTab段落。在IAR的options->linker->config里面选择linker configuratio file,改为我们修改过的;这里我们需要给出FSymTab一个固定的地址空间,与IAR ARM的根据函数自动给FSymTab段落定义空间大小有所区别,显得不够智能。
二,section段落的起始
在finsh_system_init函数内部,我们需要给出FSymTab段落的起始,可以查看IAR linker and library reference guide,找到section的起始与结束的宏:
/* enable IAR extensions, this is necessary to get __sfb and__sfe, it is of course possible to write this function in assembler instead */
我们采用
finsh_system_function_init(__sfb("FSymTab"),__sfe("FSymTab"));
三,代码的保留
在IAR ARM里面,我们在链接脚本里面加入了keep命令来保留section以及定义未使用的函数,在IAR 430默认配置对于定义未使用的函数只是编译但未链接;
我们需要加入__root指令来保留函数:
#define FINSH_FUNCTION_EXPORT(name, desc) \
const char __fsym_##name##_name[] = #name; \
__root const struct finsh_syscall __fsym_##name SECTION("FSymTab") = \
{ \
__fsym_##name##_name, \
(syscall_func)&name \
};
经过上面3个流程,我们就可以完成finsh在IAR 430上的底层移植,后续只需要修改OS的任务实现即可。
相关文章推荐
- RT-THREAD在IAR环境下使用finsh返回 Null node的解决办法
- 从iar移植到Keil,keil编译错误,.a文件
- NDK移植havlenapetr/FFMpeg |Android平台实现 【Mark一下,目前仅仅测试了一下可行性(可行,但有问题)|接下来就好好研究研究(站下巨人的肩膀么- -)】
- IAR平台FreeOS移植接口函数处理--weak属性用法
- freakz移植到IAR的CC2530工程
- IAR 430 头文件中#define定义的部分解释
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
- 关于把keil上的工程移植到IAR上
- 移植contiki准备:安装IAR FOR ARM 7.20及破解(图片丢失,下次再补充。)
- iar环境下,ucosii移植到stm32f103ze上
- IAR for 430软件的简单使用
- IAR-FreeRTOS在mega328p中的移植
- IAR环境下ucosii在STM32上的移植
- keil工程移植到IAR历程
- 在iar环境下,把一个普通的stm32工程上移植入ucosii
- IAR-FreeRTOS在mega328p中的移植
- 基于Windows手机的android移植可行性分析
- 移植keil到IAR
- 基于Windows手机的android移植可行性分析收藏
- uC/OS - III 移植 IAR平台