Dostosowuję program przykładowy z książki "AVR Praktyczne projekty" dotyczący USART-DMA. Jest tam całkiem fajna funkcja która zamienia napis na numer indeksu tego napisu w tablicy.
Nie mogę jednak zrozumieć w czym tkwi ograniczenie polegające na niemożności zwiększenia ilości wpisów w tabeli.
Fragment oryginalnego kodu:
Komendy mogą być maksymalnie 10 znakowe (jeśli dobrze rozumiem), chociaż w moim przypadku raczej powinny być do 5 znaków każda (od 3 do 5) ewentualnie ograniczę się do takich samych długości np. wszystkie 3 znakowe.
Dlaczego jeśli dopiszę kolejną komendę np. to program głupieje i nie widzi już żadnego z elementów tablicy?
Potrzebuję sterować zachowaniem urządzenia z PC na zasadzie przekazywania prostych instrukcji lub lepiej poprzez prostego bash'a jak w linuxie. Chciał bym przesłać komendę np. "komenda arg1 arg2" lub "Komenda" i poniżej argument1, a jeszcze niżej argument2 (druga opcja jak w zwykłym C przy użyciu scanf) tyle, że nie bardzo wiem jak to zrobić optymalnie. W językach wyższego poziomu zapewne pobrał bym tekst i podzielił go po spacji uzyskując 3 teksty: komenda, arg1, arg2, niestety taki zapis jest zapewne nieoptymalny w przypadku mikrokontrolerów.
Cały sens stosowania TranslateCommand jest taki by móc zastosować instrukcję switch i przełączać zadania w zależności od przesłanej komendy. Komend jest ok. 10 i poza jedną wszystkie są bezargumentowe. Zakładam, że błąd który popełniam jest dość trywialny, ale nie mogę sobie z tym poradzić. Ciężko mi przejść z języków wysokiego poziomu na C i to jeszcze tragiczne C dla dla Atmeli (w porównaniu do mikroC ten kompilator jest mało przyjemny).
Przy okazji zapytam jeszcze: Czy można używać dwóch portów UART/USART w trybie DMA? Przykładowo USARTC0 i USARTF0 (xmega128A1)? Aktualnie USARTC0 używam z DMA, natomiast USARTF0 bez DMA. Drugi port nie pobiera informacji i nie wyzwala przerwań (pracuje tam tylko Tx).
Nie mogę jednak zrozumieć w czym tkwi ograniczenie polegające na niemożności zwiększenia ilości wpisów w tabeli.
Fragment oryginalnego kodu:
Kod: C / C++
Komendy mogą być maksymalnie 10 znakowe (jeśli dobrze rozumiem), chociaż w moim przypadku raczej powinny być do 5 znaków każda (od 3 do 5) ewentualnie ograniczę się do takich samych długości np. wszystkie 3 znakowe.
Dlaczego jeśli dopiszę kolejną komendę np.
Kod: C / C++
Potrzebuję sterować zachowaniem urządzenia z PC na zasadzie przekazywania prostych instrukcji lub lepiej poprzez prostego bash'a jak w linuxie. Chciał bym przesłać komendę np. "komenda arg1 arg2" lub "Komenda" i poniżej argument1, a jeszcze niżej argument2 (druga opcja jak w zwykłym C przy użyciu scanf) tyle, że nie bardzo wiem jak to zrobić optymalnie. W językach wyższego poziomu zapewne pobrał bym tekst i podzielił go po spacji uzyskując 3 teksty: komenda, arg1, arg2, niestety taki zapis jest zapewne nieoptymalny w przypadku mikrokontrolerów.
Cały sens stosowania TranslateCommand jest taki by móc zastosować instrukcję switch i przełączać zadania w zależności od przesłanej komendy. Komend jest ok. 10 i poza jedną wszystkie są bezargumentowe. Zakładam, że błąd który popełniam jest dość trywialny, ale nie mogę sobie z tym poradzić. Ciężko mi przejść z języków wysokiego poziomu na C i to jeszcze tragiczne C dla dla Atmeli (w porównaniu do mikroC ten kompilator jest mało przyjemny).
Przy okazji zapytam jeszcze: Czy można używać dwóch portów UART/USART w trybie DMA? Przykładowo USARTC0 i USARTF0 (xmega128A1)? Aktualnie USARTC0 używam z DMA, natomiast USARTF0 bez DMA. Drugi port nie pobiera informacji i nie wyzwala przerwań (pracuje tam tylko Tx).
