defineme 发表于 2011-8-4 11:04:49

想请教马潮老师一些问题是关于GCC AVR 嵌入汇编的问题

公司要我把一段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_;等作为地址
页: [1]
查看完整版本: 想请教马潮老师一些问题是关于GCC AVR 嵌入汇编的问题