まよらー's 電子工作日記

回路設計、基板設計、Arduino、M5Stack、FPGAとか

Intel FPGA / NiosⅡSBT / まずはincludeファイルについて調べてみる

とりあえずLチカが無事に成功したので、ソースコードについて、理解を深めていく。

ソースコードは以下。

Lチカソースキャプチャ1

 

includeファイルについて

<>で囲まれたファイルはアプリインストールフォルダ以下にあるっぽい。

 

・stdio.h

C:\intelFPGA_lite\18.1\nios2eds\bin\gnu\H-x86_64-mingw32\nios2-elf\include

にあった。

これがないとprintf文が使えないらしい。

 

・system.h

C:\Intel\software\C4_NIOS_TEST_SOFT_bsp

にあった。

コードで使うマクロがたくさん定義されている。

コードを作るときには必須で必要と思う。

 

・altera_avalon_pio_regs.h

C:\Intel\software\C4_NIOS_TEST_SOFT_bsp\drivers\inc

にあった。

QuartusPrimeのPlatformDesignerで登録したペリフェラルへのアクセスは、ここにあるファイルをincludeするっぽい。

 

とりあえず、includeファイルをすべてコメントアウトして"Build Project”をしてみた。

その時の、エラーとワーニングは以下の通り。

 

10:52:17 **** Incremental Build of configuration Nios II for project C4_NIOS_TEST_SOFT ****
make all 
Info: Building ../C4_NIOS_TEST_SOFT_bsp/
C:/intelFPGA_lite/18.1/nios2eds/bin/gnu/H-x86_64-mingw32/bin/make --no-print-directory -C ../C4_NIOS_TEST_SOFT_bsp/
[BSP build complete]
Info: Compiling main.c to obj/default/main.o
nios2-elf-gcc -xc -MP -MMD -c -I../C4_NIOS_TEST_SOFT_bsp//HAL/inc -I../C4_NIOS_TEST_SOFT_bsp/ -I../C4_NIOS_TEST_SOFT_bsp//drivers/inc  -pipe -D__hal__ -DALT_NO_INSTRUCTION_EMULATION -DALT_USE_SMALL_DRIVERS -DSMALL_C_LIB -DALT_SINGLE_THREADED -DALTERA_AVALON_JTAG_UART_SMALL -DALTERA_AVALON_UART_SMALL    -O0 -g -Wall   -mno-hw-div -mno-hw-mul -mno-hw-mulx -mgpopt=global  -o obj/default/main.o main.c
main.c: In function 'main':
main.c:25:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
   printf("Hello from Nios II!\n");
   ^
main.c:25:3: warning: incompatible implicit declaration of built-in function 'printf'
main.c:25:3: note: include '<stdio.h>' or provide a declaration of 'printf'
main.c:28:4: warning: implicit declaration of function 'IOWR_ALTERA_AVALON_PIO_DATA' [-Wimplicit-function-declaration]
    IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
    ^
main.c:28:32: error: 'LED_PIO_BASE' undeclared (first use in this function)
    IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
                                ^
main.c:28:32: note: each undeclared identifier is reported only once for each function it appears in
main.c:29:4: warning: implicit declaration of function 'usleep' [-Wimplicit-function-declaration]
    usleep(500000);
    ^
make: *** [obj/default/main.o] Error 1

10:52:18 Build Finished (took 1s.7ms)



これに対して、includeファイルを一つずつコメントを外して、Build Projectしてみた。

・stdio.h

 printfに関するエラーが消えた。

・stdint.h

 何も変わらない。

・system.h

 LED_PIO_BASEに関するエラーが消えた。

 代わりにIOWR_ALTERA_AVALON_PIO_DATAに対してエラー扱いになった。

・altera_avalon_pio_regs.h

 IOWR_ALTERA_AVALON_PIO_DATAに関するワーニングが消えた。

 が、これに関するnoteが複数出てきた。

 恐らくLED_PIO_BASEが定義されていないためだろう。

 試しに、system.hも併せてコメントを外したら、IOWR_ALTERA_AVALON_PIO_DATAとLED_PIO_BASEに関するエラー、ワーニングが消え、noteも無くなった。

・sys/alt_sys_wrappers.h

 usleepに関するワーニングが消えた。

 

ということで、stdint.hはいらなさそう。

それ以外はこの短いコード中でも参照されるものであることが分かった。