Ndless проблема компиляции - PullRequest
0 голосов
/ 30 марта 2019

У меня есть файл с некоторым кодом, и он ссылается на библиотеку (#include <<em> lib >).Я создал makefile с nspire-tools new (file) и скомпилировал файл (colors.c) с командой make в терминале.Ошибки об отсутствующих ссылках / библиотеках выбрасываются, и это не создает скомпилированные файлы (которые являются .elf, .o, .prg.tns и .tns).

user@user-System-Product-Name:~/Ndless/ndless-sdk/samples/colors$ make
nspire-gcc -Wall -W -marm -Os -c colors.c -o colors.o
colors.c: In function ‘main’:
colors.c:6:2: warning: implicit declaration of function ‘lcd_incolor’; did you mean ‘lcd_init’? [-Wimplicit-function-declaration]
  lcd_incolor();
  ^~~~~~~~~~~
  lcd_init
In file included from /home/rico/Ndless/ndless-sdk/bin/../include/os.h:24,
                 from colors.c:1:
/home/rico/Ndless/ndless-sdk/bin/../include/libndls.h:164:95: error: expected ‘;’ before ‘}’ token
 ASE_ADDRESS ({"SCREEN_BASE_ADDRESS got removed in favor of the lcd_blit API."})
                                                                              ^

colors.c:7:37: note: in expansion of macro ‘SCREEN_BASE_ADDRESS’
  volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
                                     ^~~~~~~~~~~~~~~~~~~
/home/rico/Ndless/ndless-sdk/bin/../include/libndls.h:164:30: warning: pointer targets in initialization of ‘volatile unsigned char *’ from ‘char *’ differ in signedness [-Wpointer-sign]
  #define SCREEN_BASE_ADDRESS ({"SCREEN_BASE_ADDRESS got removed in favor of the lcd_blit API."})
                              ^
colors.c:7:37: note: in expansion of macro ‘SCREEN_BASE_ADDRESS’
  volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
                                     ^~~~~~~~~~~~~~~~~~~
colors.c:9:22: error: ‘SCREEN_BYTES_SIZE’ undeclared (first use in this function); did you mean ‘SCREEN_BASE_ADDRESS’?
  unsigned scr_size = SCREEN_BYTES_SIZE;
                      ^~~~~~~~~~~~~~~~~
                      SCREEN_BASE_ADDRESS
colors.c:9:22: note: each undeclared identifier is reported only once for each function it appears in
Makefile:30: recipe for target 'colors.o' failed
make: *** [colors.o] Error 1

Этот файл, который я собираю, является примером фрагмента кода, включенного в Ndless SDK, и я отложил другие файлы, которые были включены в этот один пример проекта, чтобы я мог протестировать компиляцию основногофайл.

Поскольку эти примеры уже были предварительно скомпилированы, я решил посмотреть, помещает ли исходный файл .o в ту же папку, где находится мой файл .c.Я скомпилировал с помощью той же команды, упомянутой выше, и не было выдано фатальных ошибок (просто были выданы ошибки misc api).

user@user-System-Product-Name:~/Ndless/ndless-sdk/samples/colors$ make
mkdir -p .
nspire-ld colors.o -o colors.c.elf 
genzehn --input colors.c.elf --output colors.c.tns.zehn --name "colors.c"
Warning: Your application does not appear to support 240x320px displays!
If it does, override with '--240x320-support true'.
make-prg colors.c.tns.zehn colors.c.tns
rm colors.c.tns.zehn

Похоже, что предотвращенный файл .o сделал сделать обходить создание нового файла .o и вместо этого продолжать создавать другие файлы?Как я могу исправить эти ошибки и сгенерировать необходимые файлы только из colors.c?

colors.c :

#include <os.h>

int main(void) {
    if (!has_colors)
        return 0;
    lcd_incolor();
    volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
    volatile unsigned char *ptr;
    unsigned scr_size = SCREEN_BYTES_SIZE;
    // See http://en.wikipedia.org/wiki/High_color -> "16-bit high color" for the encoding of the screen buffer
    for (ptr = scr_base; ptr < scr_base + scr_size / 3; ptr += 2)
        *(volatile unsigned short*)ptr = 0b1111100000000000;
    for (; ptr < scr_base + scr_size * 2 / 3; ptr += 2)
        *(volatile unsigned short*)ptr = 0b0000011111100000;
    for (; ptr < scr_base + scr_size; ptr += 2)
        *(volatile unsigned short*)ptr = 0b0000000000011111;
    wait_key_pressed();
    return 0;
}
...