|
公司要我把一段M8汇编代码改为C,没有任何资料就只有5K左右的汇编代码(加注释)、一些英文注释、一电路图、连主芯片数据手册都没有(这是其他公司提供的方案)
汇编里的数据(EEPROM RAM FLASH)都用ORG指令定位的。
由于只改系统中的一部分,也没有协议文档所以数据位置最好不要改变(我是这么认为的)
这就涉及到数据定位的问题,在网上找了点资料看了一下,好像就IAR提供定位
我用的是GCC,我是这样想的用内嵌汇编的方式定位数据,然后在C中引用汇编标号
现在有两个问题
第一如何将整个汇编写的.inc文件嵌入到C语言呢
这样可以吗?
这是 eeprom.inc文件
; *************************************
; ** **
; ** E E P R O M S E G M E N T **
; ** **
; *************************************
.eseg
.org 0
NON_VOLITAL_BEGIN:
IMAGE_SELECTION:
.db 0
MAC_ADDRESS:
.db 0x00,0x09,0x8b,0x00,0x92,0x14
.db 0,0 ; Pad it out so that it is a constant
LOF_STORAGE:
.dd 0
TIME_BOMB:
.db 0
RESET_COUNT:
.db 0
NON_VOLITAL_END:
.org 0x80
.db "Generic init and MAC setup on +++ Thu Jul 26 13:55:59 PDT 2007 ..."
我把它整体放倒#asm("xxxxxxx")或者一句一句的放到#asm("xxxxxxx")再改成.h文件可以吗?
如果可以那
第二个问题:我如何在我的C程序中引我汇编中的标号(地址)如IMAGE_SELECTION: NON_VOLITAL_END:等?
RAM中定位的数据也可以这样用吗?
如:
.dseg
.org 0x60
single_step_debug: .byte 1 ; True if single record processing is active - debugging only
ignore_unsolicited: .byte 1 ; True if we ignore unsolicited message queue
is_valid: .db 0
clink_addr_0: .db 0
clink_addr_1: .db 0
clink_addr_2: .db 0
clink_addr_3: .db 0
就是在C程序中引用clink_addr_0;clink_addr_;等作为地址 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|