poniedziałek, 2 stycznia 2023

Colibri iMX6 - Program w C

W tym poście chciałbym zaprezentować przygotowanie programu w języku C, z wykorzystaniem środowiska Eclipse.


Konfiguracja Eclipse:

Uruchamianie eclipsa należy wykonać przez wywołanie w konsoli zmiennej środowiskowej:

  1. . /usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi
  2. ./eclipse

Można to wywołać w standardowy sposób przez konsolę, lub przygotowanie odpowiedniego skryptu wraz z aktywatorem do wywołania programu.

  1. cd ~/eclipse
  2. . /usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi
  3. ./eclipse

W Eclipsie tworzymy nowy projekt (New Project -> C Managed Build):


Następnie należy wprowadzić kilka zmian w ustawieniach projektu.

Ustawienie komendy ${CC} w sekcji Cross GCC Compiler:

\

Ustawienie pozostałych flag jako ${CFLAGS} -c:


Następnie Cross GCC Linker:


Ustawienie Linker flags field:


Wygenerowany plik makefile wygląda następująco:

  1. ################################################################################
  2. # Automatically-generated file. Do not edit!
  3. ################################################################################
  4.  
  5. -include ../makefile.init
  6.  
  7. RM := rm -rf
  8.  
  9. # All of the sources participating in the build are defined here
  10. -include sources.mk
  11. -include src/subdir.mk
  12. -include subdir.mk
  13. -include objects.mk
  14.  
  15. ifneq ($(MAKECMDGOALS),clean)
  16. ifneq ($(strip $(C_DEPS)),)
  17. -include $(C_DEPS)
  18. endif
  19. endif
  20.  
  21. -include ../makefile.defs
  22.  
  23. # Add inputs and outputs from these tool invocations to the build variables
  24.  
  25. # All Target
  26. all: hello_world_test
  27.  
  28. # Tool invocations
  29. hello_world_test: $(OBJS) $(USER_OBJS)
  30.     @echo 'Building target: $@'
  31.     @echo 'Invoking: Cross GCC Linker'
  32.     arm-angstrom-linux-gnueabi-g++  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -o "hello_world_test" $(OBJS) $(USER_OBJS) $(LIBS)
  33.     @echo 'Finished building target: $@'
  34.     @echo ' '
  35.  
  36. # Other Targets
  37. clean:
  38.     -$(RM) $(EXECUTABLES)$(OBJS)$(C_DEPS) hello_world_test
  39.     -@echo ' '
  40.  
  41. .PHONY: all clean dependents
  42.  
  43. -include ../makefile.targets

Projekt składa się z jednego pliku, jest to standardowy Hello World:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5.     puts("!!!Hello World xxxx!!!");
  6.     return EXIT_SUCCESS;
  7. }

Następnie należy wygenerować projekt, który przygotuje odpowiednie pliku w katalogu Debug lub Release. 

Wygenerowany plik można przekopiować z pendriva lub wykorzystując do tego program bitvise. 

Po wgraniu skompilowanego programu wywołanie następuje standardowo:

./hello_world

Jeśli wyświetli się wiadomość z brakiem możliwości dostępu do pliku to należy wywołać komendę 

  1. chmod +x nazwa_pliku