|
楼主 |
发表于 2012-6-20 13:33:13
|
显示全部楼层
我可以把做好的*.xcl发给有兴趣的大神
下面是跳转接口,用汇编写,就是说我要调用BIN代码里面的函数的时候先调用APPcode里面的接口,比如说调用采集函数APP里面调用CALL_QUERY();就完事了,直接能跳到BIN里面去
注意:
1.BIN是一个独立的工程,但是里面不能有中断,或者有中断也行,不能和APP的中断重合
2.通过*.xcl分配好APP和BIN的Flash空间,不能有重合,例如:-P(CODE)CODE=9002-EFFF,10000-18FFF规定了的Flash空间是9002-EFFF,10000-18FFF两段
3.需要代码合成,举例:
比如APP生成机器码的时候有@FA00一段和@FB00一段,对以APP的工程来说@FB00一段是跳到自己的测试代码,而跳不到BIN代码的QUERY函数,所以APP要删除@FB00的一段,BIN要删除FA00的一段,这样就完成了代码的合成;
4.这种函数调用全部都是无参数的,需要参数的话要定义一段公共的内存,APP和BIN都可以操作,举例:
MSP430F5418的内存空间是1C00~5BFF,可以分配1C00~2BFF个给APP使用,2C00~3BFF给BIN使用,3C00~5BFF用作公共变量来传递APP和BIN之间的参数
说到这里相信很多人都能实现独立工程编译,机器码合成后协同工作的目标了
;用户自定义函数声明
EXTERN QUERY
EXTERN CONTROL
EXTERN IEC_INIT
EXTERN IEC_CLOSE
; 导出函数名给C语言函数
PUBLIC CALL_QUERY
PUBLIC CALL_CONTROL
PUBLIC CALL_IEC_INIT
PUBLIC CALL_IEC_CLOSE
//PUBLIC JUMPFUNCTION
RSEG CODE
//JUMPFUNCTION
ASEG
ORG 0xFA00 ;place at the bottom of APP code
CALL_QUERY:
calla #QUERY1
reta
CALL_CONTROL:
calla #CONTROL1
reta
CALL_IEC_INIT:
calla #IEC_INIT1
reta
CALL_IEC_CLOSE:
calla #IEC_CLOSE1
reta
ORG 0xFB00 ;place at the start of BIN code
QUERY1:
calla #QUERY
reta
CONTROL1:
calla #CONTROL
reta
IEC_INIT1:
calla #IEC_INIT
reta
IEC_CLOSE1:
calla #IEC_CLOSE
reta
END
|
|