Newsgroup: it.hobby.elettronica.digitale
Titolo: BeROTS e WinAVR

Ciao!
Riferendomi all'RTOS segnalato dall'amico Francesco Sacchi vorrei fare 
qualche domanda su come utilizzarlo per gli AVR. Mi basta un esempietto 
poi dovrei essere autonomo :)
Obiettivo:
compilare (correttamente!) in WinAVR il seguente programma per un ATmega644:
int main(void) {
	lcd_hw_init();
	lcd_hw_test();
	for (;;) {}
}
Scrivo quello che ho fatto:
1. posizionato BeRTOS in una mia cartella
2. aggiunta quest'ultima nei percorsi di include addizionali del 
compilatore (tramite AVR Studio)
3. nel codice ho aggiunto i seguenti #include:
#include <avr/io.h>
#include "appconfig.h"
#include "hw_lcd.h"
#include <drv/lcd_hd44.h>
4. ho copiato hw_lcd.h e app_config.h (opportunamente rinominato) nella 
cartella di progetto. Nel primo ho configurato i pin di comunicazione 
con il display e nel secondo ho aggiunto:
#define	CONFIG_LCD_4BIT			1
#define	CONFIG_LCD_ADDRESS_FAST 	0
Compilando ho ottenuto l'errore di "AVR CPU configuration error" 
generato da cpu/detect.h infatti l'ATmega644 non è presente come 
possibilità. Ho provato ad aggirare l'errore compilando per l'ATmega1281 
e ho avtuo 11 errori e 2 warning. Gli errori sono nel file drv/timer.h 
probabilmente dovuti alla riga #include CPU_HEADER(timer).
Sicuramente mi sto perdendo qualcosa io, per cui vi chiedo gentilmente 
se mi potete aiutare a capire quali sono i passi che ho sbagliato/omesso.
In generale sembra che siano supportati solo 
l'ATmega8/168/64/103/128/1281. Per gli altri come si fa? Si vanno ad 
aggiungere di volta in volta?
Infine, relativamente al punto 2 delle mie operazioni è possibile dire a 
WinAVR di cercare *sempre* anche nella mia cartella? Non ho trovato dove 
memorizza i percorsi di include.
Grazie e scusate l'ottusità mattutina :)
Marco / iw2nzm

 aggiungere di volta in volta?
Attualmente sono supportati gli AVR da te indicati.
In ogni caso aggiungere una cpu AVR è molto semplice.
Nel file cpu/detect.h basta aggiungere gli #if .. #define necessari per 
riconoscere l'atmega644, vedendo come sono fatti gli altri non dovresti 
avere problemi.
Fatto questo, dovresti già poter compilare. Gli AVR fortunatamente sono 
quasi tutti uguali come periferiche e i driver necessari al 644 
"dovrebbero" essere gli stessi che vanno per il 64 o il 128 (almeno il 
timer e la seriale).
Quindi per quanto riguarda gli errori nel driver del timer, visto che 
vengono dati anche quando compili per ATmega1281 (che è usato 
correntemente) l'unica cose che mi viene in mente è che la versione di 
avr-libc usata sia più vecchia rispetto a quella che stiamo usando noi 
(1.4.6). Che versione di WinAVR usi?
Ciao

 (1.4.6). Che versione di WinAVR usi?
WinAVR ver. 2007 12 21
AVR LibC    1.6.0 (contenuta nel pacchetto di download di WinAVR)
Ciao e grazie
Marco / iw2nzm

 AVR LibC    1.6.0 (contenuta nel pacchetto di download di WinAVR)
Mi ero confuso, in realtà abbiamo la 1.6.1 ma dalla 1.4.1 in poi non ci 
sono problemi.
Ci deve essere qualcos'altro.
La macro CPU_HEADER(timer) si espande a <drv/timer_avr.h> e serve per 
includere automagicamente l'header giusto a seconda della CPU scelta. 
Probabilmente ti manca da includere nel path degli include bertos/cpu/avr.
Ciao

 Probabilmente ti manca da includere nel path degli include bertos/cpu/avr.
Scusa il ritardo con cui rispondo. Ho provato a fare altre prove ma 
ottengo sempre nuovi errori a mano a mano che risolvo i primi! 
Sicuramente c'è un problema (mio) di fondo :)
Ma non preoccuparti, il modo di farlo andare lo troverò ^___^
Non in questi giorni comunque ora il lavoro incombe! Ci riproverò più 
avanti.
Ciao!
Marco / iw2nzm

 avanti.
Ok, hai bisogno sono qui :-)
Ciao