GBA ASM - День 24: Компилирование вместе с C

Дата публикации 10 сен 2006

GBA ASM - День 24: Компилирование вместе с C — Архив WASM.RU

Компиляция с C?

Да, сегодня мы используем как ASM, так и C++-функции в отдельных файлах, скомпилировав оба.

C++-файле

В test.cpp :

Код (Text):
  1.  
  2. /* НАЧАЛО КОДА */
  3. #include "C:\devkitadv\include\gba.h"
  4.  
  5. extern "C" {
  6. void SetThePixel(); /* ASM-функция использует C-соглашение */
  7. }
  8.  
  9. int main() {
  10.     REG_DISPCNT = 0x403; /* режим 3 */
  11.     SetThePixel(); /* ASM-функция */
  12.     while((*KEYS)&KEY_START);  /* ждём нажатия на клавишу 'Start' */
  13.     REG_DISPCNT = 0; /* нет режима (точка исчезнет) */
  14.     while(1);
  15.     return 0;
  16. }
  17. /* КОНЕЦ КОДА */

ASM-файл

Код (Text):
  1.  
  2. В test.S :
  3. <p>
  4. @-- НАЧАЛО КОДА --@
  5.     .global SetThePixel
  6. SetThePixel:
  7.     ldr r1,=0x6000200
  8.     ldr r2,=0x00FF    
  9.     str r2,[r1]      @ красная точка где-то на экране
  10.     bx lr  @return;
  11. @-- CODE END --@

Замечание: сделайте перевод строки в конце каждого из файлов.

Компиляция

Считая, что оба исходника находятся в одной директории и C:\devkitadv\bin\ находится на пути, то для компиляции потребуется следующее:

Код (Text):
  1.  
  2.     gcc test.S test.cpp
  3.     objcopy -O binary a.out test.gba

Затем запустите TEST.GBA, чтобы убедиться в работоспособности примера.

Обзор этого дня

Ссылки:

  • Пост по этой теме на форуме GBADev.ORG.
  • Ссылка, где объясняется, почему необходим "extern "C"".

Надеюсь, вам понравилось. © Mike H, пер. Aquila


0 1.130
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532