Jump to content

Mans Arduino gļuks


Jurkins
 Share

Recommended Posts

Ahoi!

Ņēmos tātad lēnītiņām ar struktūrām, unioniem un pointeriem iekš CodeLite. Kad mana izvēlne sāka strādāt, tā kā gribējās, tad nolēmu pamēģināt pārcelt šo uz Arduino. Aizcēlu un mēģināju visus meņuškas datus salikt flešā iekš MenuTree.h. Pa ātro. Protams, ka nestrādā. Sāku skatīties... Paņēmu svaigu, tīru skeču tikai ar Serial.begin iekšā.

Ja aizkomentē rindu #include "MenuTree.h", tad viss ir labi (nu saprotams:biggrin:)

Bet, ja nē, tad konsole drukā nonstopā ... "ŽoooooooooŽooooooooooŽoooooooo..." :biggrin:. Gaidu, kad izdrukās "...paaaaaapaaaaapaaaa", bet nekā :biggrin:.

Uzmetot aci uzmanīgāk, kļuva skaidrs, ka nevar rakstīt tā, kā es tur esmu uzrakstījis, bet tomēr smieklīgi. Arduino arī māk pateikt, ka ir žo...:haha:

sketch_apr09c.ino

MenuTree.h

 

Link to comment
Share on other sites

AndrisBB

Neko nevar saprast ko tu tur esi domājis.

Starpcitu header failos mainīgos nedefinē, otrāmkārtām uzliec header guardu

#ifndef MENU_TREE_H
#define MENU_TREE_H

....
bla bla bla
.....

#endif

 

Link to comment
Share on other sites

Nu šitas, vienkārši, ir nejauši sanācis joks.

Pārnesu kodu no CodeLite uz Arduino, pietjūnēju (ne visu, kā pēc tam izrādījās) un pēc tam meklēju iemeslu kāpēc kods kompilējas, bet arduino uzkaras. Atklājās, ka problēma ir tajā hedera failā, kurā ir tikai dati salikti PROGMEM atmiņā. Paņēmu tīru, jaunu skeču, ierakstīju divas rindas - palaist seriālo un izprintēt svītru. Rezultātā notikās tas, ko rakstīju. Tā arī nesaprotu, kā datu ierakstīšana var ietekmēt seriālo izvadu.

 

Link to comment
Share on other sites

(labots)

Paldies, uz šo jau esmu diezgan daudz sāls izēdis.

Programma strādā, viss ir kārtībā. Vienīgi jocīgi, ka ierakstot konstantus datus flešā un nekā ar šiem nedarot, vispār tos neaiztiekot, notiek piemēram šāds joks ar seriālo izvadu.

sketch_apr09b_menu_class_v1.0.ino

MenuTree.h

Labots - Jurkins
Link to comment
Share on other sites

AndrisBB

Ai, ja godīgi, tad slinkums iedziļināties. Tā ir ar visiem tiem Arduino, tak viņiem jānodrošina tas, ka kods ies gan uz AVR, gan ARM, gan Intel, kur katra ir pilnīgi atšķirīga arhitektūra, tapēc brīnums ka vispār kautkas tur strādā. Ja jau tu gribi rakstīt priekš AVR, tad kapēc nelieto Atmel Studio un miers, varēs gan normāli debugot, gan lietot visādas citas izvirtības. 

Link to comment
Share on other sites

Vispār jau nepatīk man tas Arduino, pārsvarā rakstu Atmel Studio, bet neesmu pagaidām atradis risinājumu tādai lietai. Lūk, piemēram šoreiz - lai pārbaudītu, kā tā meņuška strādā, es arduino vienkārši vietā, kur būtu kaut kāds "myLCD.writeilne(menustring1)" es ierakstu Serial.println(menustring1). A bet kā pareizāk šādu debagošanu veikt Atmel Studio? Assmblerā tur debagošana notiek forši, a bet c/c++ lielākā daļa mainīgo, ko salieku iekš "watch" vispār visu laiku ir bez vērtībām. It kā jau saprotu, kāpēc tas tā ir, bet kaut kā vēl neesmu iemācījies darīties pareizi.

 

Link to comment
Share on other sites

AndrisBB

Ieliec breakpointu tanī vietā kur vajag un skaties, kas notiek ar to mainīgo.

Un vaitad Atmel Studio printf nevar uztaisīt? Neatceros kādu bibliotēku (stdlib, newlib vai kautkādu viņu pašu) AVR lieto, bet nu ideja visām līdzīga, uzraksti mini funkciju, kura raksta uz UARTU un tad implememente writechar kura rakstīs uz UARTU.

Reku cilvēki vienkārši izmanto fprintf http://www.avrfreaks.net/forum/how-use-printf-uart

vai reku https://startingelectronics.org/articles/atmel-AVR-8-bit/print-float-atmel-studio-7/

Link to comment
Share on other sites

Nu taisnība jau Tev ir. Vienkārši jāiesāk.

Ar tiem breikpointiem gan... lielākā daļa manu breakpointu paliek neaktīvi, optimizācija nostrādā vai. Assemblerā viss bija vienkārši, šeit bija pārsteigums. Breikpointi neaktīvi, mainīgie neparādās... Pēdējo reizi, lai pārbaudītu, vai mana programma pareizi rēķina SI4432 reģistru vērtibas vienkārši tupa rakstīju šamās portā.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...