Atmel Studio: No such file or directory
Jan Waclawek
konfera na efton.sk
Středa Říjen 29 14:02:04 CET 2014
>No to chápu, ale jak se to má v tom AS správnì dìlat?
V AS sa to nerobi nijako, to je len prostredie. Prekladac je avr-gcc, a
najlepsie urobite, ak pouzijete ciste C, bude to prenositelne aj do inych
prekladacov. Najblizsi ekvivalent je asi pretypovanie, pripadne
(brutalnejsie) redefinicia na union bitfieldu typu
typedef struct __attribute__((packed)) {
uint8_t b0 : 1,
uint8_t b1 : 1,
uint8_t b2 : 1,
uint8_t b3 : 1,
uint8_t b4 : 1,
uint8_t b5 : 1,
uint8_t b6 : 1,
uint8_t b7 : 1,
} TByte;
(TByte)(PORTC).b1 = 1;
ale ja si obvykle takymto nelamem hlavu, a urobim si makra typu
#define SET_SDA() PORTC ^= (1 << 1);
#define CLR_SDA() PORTC &= ~(1 << 1);
a uz len tie potom pouzivam.
>A taky proè PORTC.1 nevadí?
Neviem, zavisi to od okoliteho kodu, napriklad:
c:\tmp>type ck.c
#include <avr/io.h>
#define SDA_out PORTC.1
int main(void) {
SDA_out = 1;
}
c:\tmp>"c:\Program Files\Atmel\AVRTools\AVRToolchain.2013\bin\avr-gcc" -Os
-DF_CPU=14745600UL -mmcu=atmega2561 -Wa,-adhlns=ck.lst
-Wl,-Map=ck.map,--cref -o ck.elf ck.c
ck.c: In function 'main':
ck.c:3:22: error: expected ';' before numeric constant
#define SDA_out PORTC.1
^
ck.c:6:3: note: in expansion of macro 'SDA_out'
SDA_out = 1;
^
c:\wek\StationMaster\SML\tmp>
Co sa tyka tych adresarov pre include, mnohe napovie vypis, ked sa
prekladac spusti s prepinacom -v, aj ked pripustam, ze to nie je uplne
samovysvetlujuce a nechava to stale spustu otaznikov.
Dalej, doporucujem sa zbavit zavislosti od AS a vytvorit si vlastny
makefile - ako priklad posluzi template z projektu mfile, ktory sa da
najst v baliku WinAVR. Samozrejme, treba mat aj nejaky pouzitelny make a k
nemu pouzitelny shell; ja osobne doporucujem nainstalovat WinAVR (pozor,
vklada do systemoveho PATH cestu na seba, to tomu AS moze a nemusi vadit,
neviem).
wek
Další informace o konferenci Hw-list