首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SDCC的代码银行

使用SDCC的代码银行
EN

Stack Overflow用户
提问于 2009-10-22 20:38:12
回答 2查看 2.2K关注 0票数 3

我需要在8051微控制器中使用代码库来适应所有的代码。SDCC说它支持它,但我在链接步骤中遇到了问题。

我有一个包含3个文件的测试项目: main.c、func1.c和bank.asm。main函数应该调用func1(),然后进入while循环。但是func1()在不同的代码库中。

代码语言:javascript
复制
// main.c
int func1(void) banked;

void main()
{
    int i = func1();

    while(i)
    {
    }
}

// func1.c
#pragma codeseg BANK1

int func1(void) {
    return 99; }

//bank.asm
    .area HOME    (CODE)
    .area GSINIT0 (CODE)
    .area GSINIT1 (CODE)
    .area GSINIT2 (CODE)
    .area GSINIT3 (CODE)
    .area GSINIT4 (CODE)
    .area GSINIT5 (CODE)
    .area GSINIT  (CODE)
    .area GSFINAL (CODE)
    .area CSEG    (CODE)
    .area HOME    (CODE)

__sdcc_banked_call::
    ret             ;make the call

__sdcc_banked_ret::
    ret         ;return to caller

我有一个构建批处理文件来编译所有内容并将它们链接在一起。

代码语言:javascript
复制
sdcc -c func1.c
sdcc -c main.c
asx8051 -ol bank.asm
sdcc "-Wl -b BANK1=0x018000" main.rel func1.rel bank.rel

我得到了这个链接器错误:

代码语言:javascript
复制
?ASlink-Error-Insufficient ROM/EPROM/FLASH memory.

我如何让这个链接起来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-22 22:39:14

摘自SDCC手册:

段可以使用通常的--*-loc选项放置在4兆地址空间中的任何位置。请注意,如果任何网段位于64K以上,则必须将-r标志传递给链接器以生成正确的网段位置,并且必须使用英特尔十六进制输出格式。可以使用SDCC命令行上的-Wl-r选项将-r标志传递给链接器。但是,目前链接器不能处理大于64k的代码段。

因此,将-Wl-r添加到链接器行。

票数 1
EN

Stack Overflow用户

发布于 2009-10-24 07:58:40

我不熟悉SDCC,但从其他内存库架构来看,我们必须提供重定向的内存库函数调用。

您是否需要输入正确的代码来设置存储体寄存器或在以下位置设置存储体:

代码语言:javascript
复制
__sdcc_banked_call::
    ret                 ;make the call

__sdcc_banked_ret::
    ret                 ;return to caller

例程?

虽然这可能不是链接器的问题。

你需要为: BANK1定义一个代码段吗?

这看起来像是在设置代码段:

代码语言:javascript
复制
//bank.asm
    .area HOME    (CODE)
    .area GSINIT0 (CODE)
    .area GSINIT1 (CODE)
    .area GSINIT2 (CODE)
    .area GSINIT3 (CODE)
    .area GSINIT4 (CODE)
    .area GSINIT5 (CODE)
    .area GSINIT  (CODE)
    .area GSFINAL (CODE)
    .area CSEG    (CODE)
    .area HOME    (CODE)

但是没有定义BANK1。有链接器文件吗?它是否将所有内存/闪存空间分配给这些代码段?

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

https://stackoverflow.com/questions/1606926

复制
相关文章

相似问题

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