Pisalem juz na elektrodzie pisalem na AVR Freaks i jak na razie nikt nie potrafi mi pomoc. pora na EP

Pozdro
Dexter
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięModeratorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
Czesc.Witam.
Pisalem juz na elektrodzie pisalem na AVR Freaks i jak na razie nikt nie potrafi mi pomoc.
Dobrze, ze tylko troszke.No to mnie troszke zmartwiles. To moze z innej beczki. Jak zmusic gcc zeby wygenerowal kod asemblera. Najlepiej zachowujac nazwy etykiet. Wtedy zrobie odwrotnie i wszystko skompiluje asemblerem. Wiem ze taka sztuczka ma szanse przejsc bo gdzies juz na ten temat czytalem ale teraz kiedy mi jest to potrzebne nie moge znalezc.
Pozdro
Dexter
Ale napewno jest to gdzies zdefiniowane. Mozna zrobic wlasnego includ-a z tymi definicjami lub jezeli jest to w formie przystepnej byc moze da sie dolaczyc bez zadnych kombinacji. AVRasm2 ma juz duzo dyrektyw zaczerpnietych z C.Ale i tak kod jest dostosowany do avr-as i do calego toolsetu ( np. uzywa wielu predefiniowanych symboli __stack . __zero_reg__ itd. ) wiec zaden inny avrasm tego nie ugryzie
No wlasnie probowalem. Od razu dostalem blad ze asembler nie lyka nazw tylko liczby (wpisalem out DDRB,r16 i obrazil sie na DDRB) Dlatego uwazam go za beznadziejny. Byc moze robie blad, w C bawie od bardzo niedawna.Pozostaje przeprosic sie z avr-as ( nie wiem co od niego chcesz ? asembler jak asembler, mnemoniki pozostaja takie same tylko dyrektywy maja inna skladnie; dodatkowo masz mozliwosc uzywania makr identycznych jak w C oraz headerow io.h ).
Dodaj na początku :No wlasnie probowalem. Od razu dostalem blad ze asembler nie lyka nazw tylko liczby (wpisalem out DDRB,r16 i obrazil sie na DDRB) Dlatego uwazam go za beznadziejny. Byc moze robie blad, w C bawie od bardzo niedawna.
Pozdro
Dexter
Plik main.c :Czy moglbys mi (oraz innym zainteresowanym) pokazac kawalek kodu ktory wlaczy (stan wysoki) i wylaczy(stan niski) na dowolnym porcie (bez bawienia sie w inicjalizacje itp.)
Kod: Zaznacz cały
// główny moduł projektu
#define _MAIN_MOD_ 1
// pliki dołączone ( include ) :
#include <avr/io.h>
// dane :
// funkcje :
extern void SetPortLine(void);
extern void ClearPortLine(void);
//====================
// funkcja main()
int main(void)
{
// inicjalizacja
DDRB=0xff;
// pętla główna
while (1)
{
SetPortLine();
ClearPortLine();
}
}
Kod: Zaznacz cały
// funkcje asm
// na przykład niech ustawiają i zerują bit 1 portu PORTB
#define __SFR_OFFSET 0
#include <avr/io.h>
.global SetPortLine
.section .text,"ax",@progbits
.type SetPortLine,@function
SetPortLine:
sbi PORTB,PB1
ret
.size SetPortLine, .-SetPortLine
.global ClearPortLine
.section .text,"ax",@progbits
.type ClearPortLine,@function
ClearPortLine:
cbi PORTB,PB1
ret
.size ClearPortLine, .-ClearPortLine
Kod: Zaznacz cały
// funkcje asm
// na przykład niech ustawiają i zerują bit 1 portu PORTB
#define __SFR_OFFSET 0
#include <avr/io.h>
.text
.global SetPortLine,ClearPortLine
SetPortLine:
sbi PORTB,PB1
ret
ClearPortLine:
cbi PORTB,PB1
ret
Kod: Zaznacz cały
asmtst1.elf: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 2b c0 rjmp .+86 ; 0x5a
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 24 c0 rjmp .+72 ; 0x5a
12: 23 c0 rjmp .+70 ; 0x5a
14: 22 c0 rjmp .+68 ; 0x5a
16: 21 c0 rjmp .+66 ; 0x5a
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: e6 e7 ldi r30, 0x76 ; 118
3a: f0 e0 ldi r31, 0x00 ; 0
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a0 36 cpi r26, 0x60 ; 96
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: a0 e6 ldi r26, 0x60 ; 96
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a0 36 cpi r26, 0x60 ; 96
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: 05 c0 rjmp .+10 ; 0x64
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <SetPortLine>:
5c: c1 9a sbi 0x18, 1 ; 24
5e: 08 95 ret
00000060 <ClearPortLine>:
60: c1 98 cbi 0x18, 1 ; 24
62: 08 95 ret
00000064 <main>:
//====================
// funkcja main()
int main(void)
{
64: cf e5 ldi r28, 0x5F ; 95
66: d4 e0 ldi r29, 0x04 ; 4
68: de bf out 0x3e, r29 ; 62
6a: cd bf out 0x3d, r28 ; 61
// inicjalizacja
DDRB=0xff;
6c: 8f ef ldi r24, 0xFF ; 255
6e: 87 bb out 0x17, r24 ; 23
// pętla główna
while (1)
{
SetPortLine();
70: f5 df rcall .-22 ; 0x5c
ClearPortLine();
72: f6 df rcall .-20 ; 0x60
74: fd cf rjmp .-6 ; 0x70
No to rzeczywiście masz jakiś tępy kompilator C.Sprobuje jeszcze troszke powalczyc a jak sie nie uda to tylko utwierdze sie w przekonaniu o wyzszosci asemblera.
Cześć.Brakuje mi tylko jednej rzeczy. Mozliwosci wywolania (skrotem lub z menu) skryptu lub komendy z linii polecen. Chodzi o to ze napisalem sobie .bat-a ktory mi czysci stare kompilacje i teraz musze przelaczac sie zeby uruchamiac ten plik.
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości