首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绝对函数地址keil 8051

绝对函数地址keil 8051
EN

Stack Overflow用户
提问于 2015-01-29 23:51:10
回答 1查看 646关注 0票数 0

如何在C51 Keil中定位和调用带绝对地址的函数?后台ROM具有一些实用功能。我想调用这些函数来优化flash的代码空间。

EN

回答 1

Stack Overflow用户

发布于 2015-02-11 01:08:43

一个简单的例子:

代码语言:javascript
复制
#pragma SRC

// type of external function
typedef void (code * tExternalFunctionPtr)(void);

// Address of external function in ROM
#define FUNC_ADDR (0x1234)

void callExample(void)
{
    // Simple example with call via function pointer in RAM
    tExternalFunctionPtr funcPtr;
    funcPtr = FUNC_ADDR;
    (*funcPtr)();

    // Direct call without function pointer in RAM
    (* (tExternalFunctionPtr)FUNC_ADDR)();
}

编译为以下汇编代码:

代码语言:javascript
复制
; TEST.SRC generated from: TEST.C


NAME    TEST

?PR?callExample?TEST SEGMENT CODE
EXTRN    CODE (?C_ICALL)
PUBLIC    callExample
; #pragma SRC
; 
; // type of external function
; typedef void (code * tExternalFunctionPtr)(void);
; 
; // Address of external function in ROM
; #define FUNC_ADDR (0x1234)
; 
; void callExample(void)

    RSEG  ?PR?callExample?TEST
    USING    0
callExample:
            ; SOURCE LINE # 9
; {
            ; SOURCE LINE # 10
;     // Simple example with call via function pointer in RAM
;     tExternalFunctionPtr funcPtr;
;     funcPtr = FUNC_ADDR;
            ; SOURCE LINE # 13
;---- Variable 'funcPtr?01' assigned to Register 'R6/R7' ----
    MOV      R7,#034H
    MOV      R6,#012H
;     (*funcPtr)();
            ; SOURCE LINE # 14
    MOV      R2,AR6
    MOV      R1,AR7
    LCALL    ?C_ICALL
; 
;     // Direct call without function pointer in RAM
;     (* (tExternalFunctionPtr)FUNC_ADDR)();
            ; SOURCE LINE # 17
    LCALL    01234H
; }
            ; SOURCE LINE # 18
    RET      
; END OF callExample

    END

这可能有助于说明它在原则上是如何工作的。

但这还不是全部:您必须知道要调用的函数在ROM中的地址。您还必须知道是否需要参数以及如何返回返回值。同样重要的是要知道只读存储器功能可能会改变哪些寄存器,并确保C51编译器不会期望这些寄存器保持不变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28218907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档