とりあえずLチカが無事に成功したので、ソースコードについて、理解を深めていく。
ソースコードは以下。
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はいらなさそう。
それ以外はこの短いコード中でも参照されるものであることが分かった。