4

LPC2148 の KEIL IDE には、ARM CC でコンパイルされた RTX カーネル プログラムと他のプログラムを含むプロジェクトがあります。次に、IDE を KEIL(ARM CC) から Eclipse(GCC) に変更する必要があります。Eclipse GCC Compiler でコンパイルしようとすると、RTX_Config.c および RTX_Config.h ファイルにエラーが表示されます。その他のファイルは、GCC コンパイラを使用して正常にコンパイルされます。ただし、RTXConfig.c ファイルには、GCC によってコンパイルされないコンパイラ固有のコードが含まれています。GCC コンパイラを使用して Eclipse IDE でこのプロジェクトをコンパイルするソリューションはありますか? 初心者なので、これで私を助けてください。前もって感謝します

irq 、 __swi 、 _ _task 、 __asm など、ARM CC (keil) で正常にコンパイルされるkeil 固有のキーワードがいくつかありますが、それを GCC コンパイラ (Eclipse) に移植しようとすると、このコンパイラはこれらのキーワードをコンパイルできず、エラーが表示されます。これらの keil 固有のキーワードを GCC Compiler でコンパイルする方法はありますか?

4

1 に答える 1

2

do_software_interrupt、do_irq、および do_fiq は、それぞれ SWI、IRQ、および FIQ の割り込みサービス ルーチンです。これらの関数は、gcc の属性機能を使用して c で実装されています。これは、irq、fiq、およびソフトウェア割り込み用のルーチンを含む実際の C コードです。

entry.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 に答える