4

我们在 LPC2148 的 KEIL IDE 中有一个项目,其中包含 RTX 内核程序以及其中的其他程序,由 ARM CC 编译。现在我们需要将 IDE 从 KEIL(ARM CC) 更改为 Eclipse(GCC)。当我们尝试在 Eclipse GCC 编译器中编译它时,它在 RTX_Config.c 和 RTX_Config.h 文件中显示错误。其他文件使用 GCC 编译器编译成功。但是 RTXConfig.c 文件有编译器特定的代码,这些代码没有被 GCC 编译。有没有使用 GCC 编译器在 Eclipse IDE 中编译这个项目的解决方案?作为初学者,请帮助我。提前致谢

我们有一些特定于 keil 的关键字,例如irq 、 __swi 、 _ _task 、 __asm ,它们已被 ARM CC (keil) 成功编译,但是当我们尝试将其移植到 GCC Compiler (Eclipse) 时,此编译器无法编译这些关键字并显示错误。有没有办法在 GCC 编译器中编译这些 keil 特定的关键字?

4

1 回答 1

2

do_software_interrupt、do_irq 和 do_fiq 分别是 SWI、IRQ 和 FIQ 的中断服务程序。这些函数是在 c 中使用 gcc 的属性特性实现的。这是包含 irq、fiq 和软件中断例程的实际 c 代码。

入口.c

void __attribute__((interrupt("IRQ"))) do_irq()
{
    //your irq service code goes here
}

void __attribute__((interrupt("FIQ"))) do_fiq()
{
    //your fiq service code goes here
}

void __attribute__((interrupt("SWI"))) do_software_interrupt()
{
    volatile unsigned int int_num;
    asm("LDR r0, [lr, #-4]");
    asm("BIC r0, #0xFF000000");
    asm("MOV %0, r0":"=r"(int_num):);
    //based on int_num, you can determine which system call is called
}

void c_start() {
    asm volatile ("SVC 0x5");
    while(1){}
}
于 2015-09-18T06:10:40.907 回答