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