logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Tworzenie dowiązania do mfile.tcl - błąd nie znaleziono polecenia

Jacek212 17 Maj 2020 20:38 939 23
  • #1 18700063
    Jacek212
    Poziom 13  
    Witam. Używam linuxa. Chcę pisać kod dla AVR w CodeBlocks. Do kompilacji potrzebuję pliku makefile, chciałem go zrobić z aplikacji Mfile według tego co jest napisane na na tej stroniewszystko szło dobrze do momentu zrobienia dowiązania do mfile.tcl. Co prawda dowiązanie się zrobiło ale nie powstał plik @mfile tylko @mfile.tcl. Kiedy próbuję z wiersza poleceń uruchomić aplikację dostaję taki komunikat
    bash: mfile: nie znaleziono polecenia
    i aplikacja mi się nie otwiera. Poradzi mi ktoś co mam zrobić żeby zadziałało?
  • #2 18700087
    tmf
    VIP Zasłużony dla elektroda
    Skoro używasz codeblocks lub innego IDE, to twórz makefile w tym IDE. Na tym etapie nie za bardzo jest sens pisać plik makefile ręcznie, lub przy pomocy innych narzędzi niż oferuje wybrane IDE. Swoją drogą łatwiej będzie ci znaleźć poradniki dotyczące AVR i Eclipse.
  • #4 18700215
    trol.six
    Poziom 31  
    Co mówią polecenia (z konsoli):
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    ?
    Poza tym do tego trzeba mieć interpreter tcl
  • #5 18700225
    Jacek212
    Poziom 13  
    trol.six napisał:
    Co mówią polecenia (z konsoli):
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    ?
    Poza tym do tego trzeba mieć interpreter tcl


    ls -l /usr/bin/mfile*
    lrwxrwxrwx 1 root root 32 maj 17 19:40 /usr/bin/mfile.tcl -> /usr/local/share/mfile/mfile.tcl
    

    ls -l /usr/local/share/mfile/
    razem 124
    -rw-r--r-- 1 root staff  8570 lip 15  2004 help.html
    -rw-r--r-- 1 root staff 16781 lip 15  2004 htmlview.tcl
    -rw-r--r-- 1 root staff   887 paź 23  2003 htmlview.xbm
    -rw-r--r-- 1 root staff 13725 sty 19  2006 makefile
    -rw-r--r-- 1 root staff 13725 sty 19  2006 makefile_template
    -rwxr-xr-x 1 root staff 42605 maj 17 19:31 mfile.tcl
    -rw-r--r-- 1 root staff   878 paź 23  2003 mfile.xbm
    -rw-r--r-- 1 root staff  7027 lip 15  2004 README
    
  • #6 18700263
    trol.six
    Poziom 31  
    no to skasuj sobie ten /usr/bin/mfile.tcl i zrób to dowiązanie:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    .
  • #8 18700320
    trol.six
    Poziom 31  
    Prawie że niemożliwe :) A zmienić nazwe sobie możesz?
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    ?
  • #9 18700442
    Jacek212
    Poziom 13  
    Nie mogę. Dostaję taki komunikat
    mv: nie można wykonać stat na '/usr/bin/mfile.tcl': Nie ma takiego pliku ani katalogu


    A tak w ogóle jaki interpreter do tcl polecacie?

    Udało mi się trochę ruszyć do przodu, poprawiłem jakiś plik makefile który znalazłem w internecie (dodaję go w załączniku) sprawdziłem na bardzo prostym kodzie, niby wszystko jest ok, nie ma błędów ani ostrzeżeń tylko w zakładce Build log na samym dole w ostatnich dwóch wierszach dostaję taki komunikat na czerwonym tle.

    Cytat:
    Process terminated with status 2 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))


    CO jeszcze muszę poprawić żeby było dobrze?
  • #11 18719114
    szelus
    Poziom 34  
    A masz zainstalowanego TCL-a?

    Swoją drogą, to wszystko jakieś dziwne. Też korzystam z Linuxa i dwa miesiące temu musiałem sobie odtworzyć środowisko do AVRów. Też korzystam z CodeBlocks i nie musiałem nic kombinować. Po prostu zainstalowałem gcc-avr, CodeBlocks i avrdude i poszło od strzału. Aż się zdziwiłem. :)
    Jakiego masz Linuxa?
  • #12 18719855
    Jacek212
    Poziom 13  
    Tak, mam tcl. kiedy próbuję go zainstalować dostaję taki komunikat:
    Cytat:
    apt-get install tcl
    Czytanie list pakietów... Gotowe
    Budowanie drzewa zależności
    Odczyt informacji o stanie... Gotowe
    tcl is already the newest version (8.6.0+9).
    0 aktualizowanych, 0 nowo instalowanych, 0 usuwanych i 0 nieaktualizowanych.

    Pomyślałem że może masz rację, odinstalowałem i zainstalowałem jeszcze raz CodeBlocks ale nadal jest to samo. Po kompilacji w zakładce Build log otrzymuję coś takiego:
    -------------- Build: Release in AVR-test2 (compiler: GNU GCC Compiler for AVR)---------------
    
    Checking if target is up-to-date: make -q -f Makefile Release
    Running command: make all
    -------- start --------
    Rozmiar przed:
    AVR Memory Usage
    ----------------
    Device: atmega8
    Program:      72 bytes (0.9% Full)
    (.text + .data + .bootloader)
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    Rozmiar po:
    AVR Memory Usage
    ----------------
    Device: atmega8
    Program:      72 bytes (0.9% Full)
    (.text + .data + .bootloader)
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    -------- koniec --------
    Running project post-build steps
    avr-objdump -h -S bin/Release/AVR-test2.elf > bin/Release/AVR-test2.lss
    avr-objdump: 'bin/Release/AVR-test2.elf': No such file
    Process terminated with status 1 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))

    Zauważyłem też że w Settings->Compiler po ustawieniu kompilatora na AVR i kliknięciu OK znów wraca na GNU GCC Compiler.
  • #13 18720123
    szelus
    Poziom 34  
    Bo to taka zmyłka...
    Settings->Compiler ustawia domyślna konfigurację kompilatora dla wszystkich projektów. I tam są dostępne opcje dla wszystkich kompilatorów skonfigurowanych dla CodeBlocks. Ale to nie decyduje, który kompilator jest używany.
    Wybór kompilatora dla danego projektu jest w Project->Build Options. I ustawienia z tej zakładki są priorytetowe w stosunku do Settings->Compiler.
  • #14 18720159
    Jacek212
    Poziom 13  
    szelus napisał:
    Bo to taka zmyłka...
    Settings->Compiler ustawia domyślna konfigurację kompilatora dla wszystkich projektów. I tam są dostępne opcje dla wszystkich kompilatorów skonfigurowanych dla CodeBlocks. Ale to nie decyduje, który kompilator jest używany.
    Wybór kompilatora dla danego projektu jest w Project->Build Options. I ustawienia z tej zakładki są priorytetowe w stosunku do Settings->Compiler.

    No to w takim razie w Project->Build Options mam ustawiony kompilator dla AVR i w dalszym ciągu ten sam błąd.
  • #15 18720357
    szelus
    Poziom 34  
    Generalnie wygląda jakby projekt u Ciebie się kompilował poprawnie, tylko "postprocessing" się wysypywał. Podejrzewam, że masz coś źle ustawione w projekcie, ale trudno zgadnąć co.
    Proponuję jedną z dwóch opcji. Albo utwórz sobie od zera czysty projekt AVR wybierając odpowiednią opcję z wizzarda i spróbuj skompilować. Albo spakuj cały projekt i zamieść tutaj, to spróbuję zobaczyć czy u mnie działa.
  • #17 18720729
    szelus
    Poziom 34  
    No dobra, to teraz wyszło szydło z worka, że korzystasz z własnego Makefile nie do końca wiedząc, na czym to polega.;)
    Na serio i bez urazy. Wyłączyłem opcję użycia własnego Makefile (Project->Properties) i projekt się poprawnie zbudował. Nie działa Ci, bo Makefile jest zły. W tej chwili jest już za późno, abym to analizował głębiej.
    Może podziel się informacją, dlaczego (w jakim celu) chcesz używać "custom Makefile". Bo technologia make jest "trochę" złożona. I szansa, że plik Makefile wygrzebany gdzieś w sieci i "trochę" dostosowany bez dogłębnej znajomości tematu, zwłaszcza jeśli ten Makefile jest skomplikowany (a ten jest) jest niewielka. Oczywiście, technologia make jest "do ogarnięcia", tyle, że obecnie już nieco przestarzała. A jeżeli już, to lepiej zacząć od prostszych wersji.
    Nie bez powodu są różne nakładki generujące pliki make czy całe narzędzia alternatywne. Bo oryginalna technologia jest podatna na błędy i ciężko się debuguje. Także wracamy do pytania "po co jeść tę żabę". :)
    ---
    Nie dawało mi spokoju, więc przyjrzałem się jeszcze raz. Ten Makefile nawet działa (on chyba pochodzi z WinAVR co?). Tylko nie jest kompatybilny z CodeBlocks. CodeBlocks i jego konfiguracja dla AVR mają swoje założenia co do nazewnictwa i lokalizacji plików wynikowych, a ten Makefile ma trochę inne. Więc odpalony przez CodeBlocks buduje poprawnie, co miał zbudować, ale potem CodeBlocks próbuje wykonać swoje "post build steps", które nie są kompatybilne (i już niepotrzebne) i te kroki właśnie zawodzą.
    Jeżeli się upierasz przy tym Makefile-u, to po prostu usuń te kroki z opcji projektu (Project->Build Options->Post-build steps).
    Tylko czemu miałoby to służyć...
  • #18 18720813
    Jacek212
    Poziom 13  
    Dziękuję za podpowiedź, robiłem to według poradnika z netu Link. Plik makefile miał być generowany przez aplikację mfile. Jeżeli plik makefile sam się wygeneruje to dla mnie jeszcze lepiej, nie chcę skupiać się na takich rzeczach tylko na samym kodzie.

    Zrobiłem tak jak poradziłeś odznaczyłem custom makefile ale teraz jest inny problem. Pojawia mi się taki błąd:
    Cytat:
    /usr/include/features.h|364|fatal error: sys/cdefs.h: Nie ma takiego pliku ani katalogu|
    no i faktycznie nie ma takiego pliku, utworzyć go mogę tylko co w nim ma być? Pewnie znów gdzieś jakaś opcja nie zaznaczona. :D

    Problem zniknął po doinstalowaniu pakietu libc6-dev-i386 ale za to teraz mam taki komunikat
    Cytat:

    -------------- Build: Release in AVR-test (compiler: GNU GCC Compiler for AVR)---------------

    avr-gcc -Wall -mmcu=atmega88p -DF_CPU=8000000UL -Os -I/usr/include -c main.c -o obj/Release/main.o
    In file included from main.c:6:0:
    /usr/lib/avr/include/avr/pgmspace.h:1167:26: error: unknown type name ‘uint_farptr_t’
    extern size_t strlen_PF (uint_farptr_t src) __ATTR_CONST__; /* program memory can't change */
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1168:27: error: unknown type name ‘uint_farptr_t’
    extern size_t strnlen_PF (uint_farptr_t src, size_t len) __ATTR_CONST__; /* program memory can't change */
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1169:37: error: unknown type name ‘uint_farptr_t’
    extern void *memcpy_PF (void *dest, uint_farptr_t src, size_t len);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1170:37: error: unknown type name ‘uint_farptr_t’
    extern char *strcpy_PF (char *dest, uint_farptr_t src);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1171:38: error: unknown type name ‘uint_farptr_t’
    extern char *strncpy_PF (char *dest, uint_farptr_t src, size_t len);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1172:37: error: unknown type name ‘uint_farptr_t’
    extern char *strcat_PF (char *dest, uint_farptr_t src);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1173:38: error: unknown type name ‘uint_farptr_t’
    extern size_t strlcat_PF (char *dst, uint_farptr_t src, size_t siz);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1174:38: error: unknown type name ‘uint_farptr_t’
    extern char *strncat_PF (char *dest, uint_farptr_t src, size_t len);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1175:39: error: unknown type name ‘uint_farptr_t’
    extern int strcmp_PF (const char *s1, uint_farptr_t s2) __ATTR_PURE__;
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1176:40: error: unknown type name ‘uint_farptr_t’
    extern int strncmp_PF (const char *s1, uint_farptr_t s2, size_t n) __ATTR_PURE__;
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1177:43: error: unknown type name ‘uint_farptr_t’
    extern int strcasecmp_PF (const char *s1, uint_farptr_t s2) __ATTR_PURE__;
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1178:44: error: unknown type name ‘uint_farptr_t’
    extern int strncasecmp_PF (const char *s1, uint_farptr_t s2, size_t n) __ATTR_PURE__;
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1179:41: error: unknown type name ‘uint_farptr_t’
    extern char *strstr_PF (const char *s1, uint_farptr_t s2);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1180:38: error: unknown type name ‘uint_farptr_t’
    extern size_t strlcpy_PF (char *dst, uint_farptr_t src, size_t siz);
    ^
    /usr/lib/avr/include/avr/pgmspace.h:1181:36: error: unknown type name ‘uint_farptr_t’
    extern int memcmp_PF(const void *, uint_farptr_t, size_t) __ATTR_PURE__;
    ^
    Process terminated with status 1 (0 minute(s), 0 second(s))
    15 error(s), 0 warning(s) (0 minute(s), 0 second(s))

  • #19 18721214
    szelus
    Poziom 34  
    Konieczność doinstalowania pakietu deweloperskiego biblioteki i386 mogłaby być wskazówką, że coś idzie nie tak...
    Bo w czasie kompilacji skrośnej żadne systemowe pliki nagłówkowe (/usr/include) nie powinny być używane.

    Niestety, ta skleroza(moja)... Zapomniałem, że nie "poszło od strzału". Musiałem poprawić ścieżki.
    I tu widzę, że po przeinstalowaniu CodeBlocks nie powtórzyłeś (albo nie do końca) kroków z części "Konfiguracja Atmel Toolchain oraz narzędzi Coreutils" ze strony, na którą się powołujesz. A konkretnie chodzi o ten obrazek.
    Tworzenie dowiązania do mfile.tcl - błąd nie znaleziono polecenia
    W zasadzie żadne inne kroki z tej strony nie są potrzebne, ale ten jest krytyczny.
    Co ciekawe, ten krok nie jest potrzebny, aby własny Makefile działał z CodeBlocks, tylko bez niego gubi się (nic dziwnego) wbudowana w CodeBlocks analiza składni C.
  • #20 18722721
    Jacek212
    Poziom 13  
    Zrobiłem tak jak kolega szelus polecił ale w zakładce Build log dostaję taki komunikat
    Cytat:
    -------------- Build: Release in AVR-test2 (compiler: GNU GCC Compiler for AVR)---------------

    avr-gcc -Wall -mmcu=atmega88p -DF_CPU=8000000UL -Os -I/ -c fuse.c -o obj/Release/fuse.o
    avr-gcc -Wall -mmcu=atmega88p -DF_CPU=8000000UL -Os -I/ -c main.c -o obj/Release/main.o
    avr-g++ -L/ -o bin/Release/AVR-test2.elf obj/Release/fuse.o obj/Release/main.o -mmcu=atmega88p -Wl,-Map=bin/Release/AVR-test2.map,--cref
    Output file is bin/Release/AVR-test2.elf with size 2.69 KB
    Running project post-build steps
    avr-objdump -h -S bin/Release/AVR-test2.elf > bin/Release/AVR-test2.lss
    avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex bin/Release/AVR-test2.elf bin/Release/AVR-test2.hex
    avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex bin/Release/AVR-test2.elf bin/Release/AVR-test2.eep
    avr-objcopy --no-change-warnings -j .lock --change-section-lma .lock=0 -O ihex bin/Release/AVR-test2.elf bin/Release/AVR-test2.lock
    avr-objcopy --no-change-warnings -j .signature --change-section-lma .signature=0 -O ihex bin/Release/AVR-test2.elf bin/Release/AVR-test2.sig
    avr-objcopy --no-change-warnings -j .fuse --change-section-lma .fuse=0 -O ihex bin/Release/AVR-test2.elf bin/Release/AVR-test2.fuse
    srec_cat bin/Release/AVR-test2.fuse -Intel -crop 0x00 0x01 -offset 0x00 -O bin/Release/AVR-test2.lfs -Intel
    /bin/sh: 1: srec_cat: not found
    Process terminated with status 127 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
  • #21 18722964
    szelus
    Poziom 34  
    Doinstaluj pakiet srecord.
  • #22 18726935
    Jacek212
    Poziom 13  
    Wszystko działa mi tak jak oczekiwałem dzięki dużej pomocy Pana szelus za co bardzo mu dziękuję, mam tylko jeszcze jedno pytanie taka w sumie kropka nad i. Jak zrobić żeby po kliknięciu jednego przycisku program się kompilował i jeśli nie ma błędów ani ostrzeżeń wgrywał się do pamięci flash i eeprom jeżeli plik *.eep powstał. Na tej samej zasadzie jak przycisk Build and run dla kodów na PC.
  • Pomocny post
    #23 18727697
    szelus
    Poziom 34  
    To jest coś, czego nie udało mi się na razie osiągnąć. Wydaje się, że CodeBlocks nie jest wystarczająco elastyczne, aby podpiąć dowolną komendę pod guzik "Run". Ale jako że jest to projekt open-source, to może kiedyś się uda. :)

Podsumowanie tematu

Użytkownik napotkał problem z tworzeniem dowiązania do pliku mfile.tcl w systemie Linux podczas pisania kodu dla AVR w CodeBlocks. Po utworzeniu dowiązania, zamiast pliku wykonywalnego mfile, powstał plik mfile.tcl, co skutkowało błędem "nie znaleziono polecenia". Użytkownik próbował różnych rozwiązań, w tym usunięcia i ponownego tworzenia dowiązania, ale napotkał trudności. Ostatecznie, po wskazówkach innych uczestników dyskusji, udało mu się poprawić plik makefile oraz skonfigurować środowisko, co pozwoliło na poprawną kompilację projektu. Użytkownik zadał również pytanie o możliwość automatyzacji procesu kompilacji i wgrywania kodu do pamięci flash po naciśnięciu przycisku, na co odpowiedziano, że CodeBlocks może nie wspierać takiej funkcjonalności.
Podsumowanie wygenerowane przez model językowy.
REKLAMA