Skocz do zawartości

Interpretator poleceń. Cięzko cos takiego napisać ?


BlackJack

Pomocna odpowiedź

Chciałbym sobie napisać interpretator poleceń, który pozwoli w EEPROM stworzyć coś na wzór pliku Config.sys. Dane zapisane jako znaki ASCII.

Teraz jak to zrobić ?

Na pewno jest mi potrzebna jakaś tablica char, do przetwarzania danych.

Polecenia to tablica stałych, przy czym chciałbym, sobie to nieco uprościć, że np, polecenie zaczyna się i kończy znakiem $. Instrukcja więc wyglądałaby tak:

$F_TSOP$=36000 -> ustaw częstotliwość nośną na 36KHz.

$Motor_1$=2000 -> częstotliwość PWM dla silnika 1 2KHz

Język programowania zgodny ANSI C.

Po co mi to ? Chodzi o to żeby łatwo i szybko dało się przekonfigurować robota, bez dłubania w kodzie programu, tylko wgrywając nowy plik do EEPROM.

Link do komentarza
Share on other sites

A po co dokładnie Tobie to jest?

Jak masz tylko w eeprom wpisywać jakieś dane to jest sens robić to w tekscie? (ile procesor się namęczy, żeby to rozkodować?)

Nie łatwiej ustalić strukturę z ilomaś unsigned int, gdzie będziesz trzymał wszystkie dane i tylko do niej "zgrywać" dane z eeproma?

Do tego możesz napisać prosty kod pod windowsa do generowania danych do wgrania w eeprom wg. struktury...

Link do komentarza
Share on other sites

Tak jak piszesz już kiedyś robiłem, sprawdza się to.

Natomiast forma tekstowa ma pewną zaletę, nie musisz, dokładnie znać wartości dla rejestrów, podajesz tylko parametry, a te są różne 8, 16, czy nawet 24 bitowe.

Po drugie użyjesz dowolnego edytora TXT, do edycji na kolnie parametrów.

Po trzecie, dane do EEPROMa możesz łatwo wgrać choćby przez RS232, w robocie, bez konieczności posiadania programatora pod ręką. Oczywiście warunek że system taką opcję ma.

Zaleta. Przykładowa sytuacja.

Na zawodach chcesz szybko zmienić jakieś parametry systemu. Nie masz lapka. jeżeli masz w robocie rs232, lub nawet USB (coraz popularniejsze), pożyczasz od kogoś na 5 minut lapka, sklecasz nowy plik Config, na kolanie, wgrywasz, i masz gotowe. Nie musisz ze sobą tachać programatora, kodu źródłowego etc.

Owszem, taki translator z TXT, na config sys zajmuje sporo pamięci CPU, ale właściwie tłumaczy dane tylko raz, podczas startu systemu.

Ja chcę rozszerzyć swoją wiedzę i horyzonty, a jak przy okazji powstanie użyteczny podsystem czy nawet RTOS, czemu nie ?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Mi też chodziła po głowie koncepcja zapisywania danych w postaci plików tekstowych z których będzie potem czerpać kod. Koncepcję można wykorzystać na wiele sposobów. Poza skryptami konfiguracyjnymi wczytywanymi podczas działania programu myślałem też o skryptach generujących na podstawie metadanych jakieś pliki .c i .h. Dzięki temu można uniknąć błędów w stylu "zmieniłem kod w 5 miejscach ale zapomniałem o jeszcze jednym i straciłem 5h na debugowanie". Niestety nie miałem jeszcze okazji konkretnie przysiąść do tematu i nie mogę zaoferować gotowych rozwiązań. Myślę jednak, że może zainteresuje Cię coś takiego:

http://www.gnu.org/software/bison/

Podobno jest to narzędzie do tworzenia parserów odczytujących pliki napisane według składni którą sami sobie możemy zdefiniować. Bison jest narzędziem open source, więc zawsze możesz ściągnąć kod i zaczerpnąć tylko niektóre koncepcje.

Link do komentarza
Share on other sites

TZN. ja się nie chciałem rozpędzać tak jak kolega wyżej, ale możliwości, robota wyposażonego w taki Shell, mogą być spore, można go np, przeprogramować z Smartfonu czy Tabletu, wysyłając mu plik napisany w notatniku, przez Bluetooth.

Oczywiście stworzenia takiego systemu operacyjnego to juz jest większe wyzwania, niż prosty interpretator konfiguracji.

Co do samego programu to znalazłem trochę kodu z/dla UNIXA. I wg. tej idei stworzenie Shella nawet w BASCOMie powinno być wykonalne.

int main()
{
 char buf[1024], *args[64];

 while (koniec == 0) {

   cout << "Command: " << flush;


   if  (cin.eof()) {
     cout << endl;
     return 0;
   } else {
     cin.getline(buf, sizeof(buf));
   }

   if (strlen(buf) == 0) 
     continue;

   if(buf[0] == "exit"){
       koniec = 1;
   }

   parse(buf, args); //funkcja dzielaca strumien danych na czesci
   execute(args); // funkcja, ktora wykonuje aplikacje w srodowisku Unix/Linux
 } 
}
Link do komentarza
Share on other sites

Pomysł jest ciekawy, sam się z czymś takim spotkałem i tam umożliwiało jeszcze tworzenie instrukcji warunkowych, pętli, ładowania danych itd. oczywiście w ograniczonym stopniu, ale jednak. Można np. napisać tak, aby dało się uruchamiać później wybrane funkcje 🙂

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.