韦东山Linux嵌入式课程社区
直播中

李剑

7年用户 150经验值
私信 关注

汇编中调用c函数中的子函数不能成功点灯

老师,请教一个汇编中调用函数到问题。

我定义来两个文件led.c(led_on 点灯, led_off 熄灯), test.c文件 (函数 test_led 调用 led_on 子函数,实现点灯功能), 内容如下。 我在汇编start.S中, 直接调用 bl led_on, 则可以成功点灯, 但如果通过 bl test_led 间接调用led_on, 谮不能成功点灯, 请问是什么原因,嘎如何解决呢?

谢谢!

/*led.c */


# define GPFCON     0x56000050
# define GPFDAT     0x56000054

void led_on (int i)
{
    unsigned long *pCon, *pDat;
    pCon = GPFCON;
    pDat = GPFDAT;

    switch (i)
    {
        case 1:
            *pCon &= ~(0x11<<8);
            *pCon |= (0x01 << 8);
            *pDat &= ~(0x1<<4);
            break;
        case 2:
            *pCon &= ~(0x11<<10);
            *pCon |= (0x01 << 10);
            *pDat &= ~(0x1<<5);
            break;
        case 3:
            *pCon &= ~(0x11<<12);
            *pCon |= (0x01 << 12);
            *pDat &= ~(0x1<<6);
            break;
        default:
            break;
    }
}

/*test.c*/

int test_led(void){
    led_on(1);
    return 0;
}

回帖(2)

高文军

2019-3-4 13:51:33
代码不全,请把全部代码贴出来,传附件也可以。
另外 你使用 bl led_on 的时候,传递的参数是什么
举报

李淑兰

2019-3-4 14:11:16
参数通过r0传递,
mov  r0, #1
bl       led_on
这部分代码是可以正常执行到。关键是第二部分,通过test_led, 调用 led_on时酒不行来。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分