Re: Jak se přeloží
Pavel Hudeček
edizon na seznam.cz
Středa Duben 24 21:30:21 CEST 2024
Zkusil jsem AVR64DD32, to bude podobný. Zrecykloval jsem předchozí pokus:
--------------------
#include <avr/io.h> // AVR64DD32
#include <math.h>
int main(void) {
//_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL_CLKSEL_EXTCLK_gc); //
ext clk nebo HF xtal
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL_CLKSEL_OSCHF_gc); //
int osc
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0); // nedelit - bude 24 MHz
//_PROTECTED_WRITE(CLKCTRL.XOSCHFCTRLA, CLKCTRL_CSUTHF_4K_gc +
CLKCTRL_FRQRANGE_24M_gc + CLKCTRL_ENABLE_bm); // Xosc 24MHz
_PROTECTED_WRITE(CLKCTRL.OSCHFCTRLA, CLKCTRL_RUNSTBY_bm +
CLKCTRL_FRQSEL_24M_gc); // int osc 24MHz
PORTC.DIR = 255;
PORTF.DIR = 255 - (1<<6) - (1<<7);
PORTF.PIN6CTRL = PORT_PULLUPEN_bm;
PORTF.PIN7CTRL = PORT_PULLUPEN_bm;
while (1) {
struct {
bool b1:1;
bool b2:1;
} b;
PORTC.OUT = 255;
PORTC.OUT = 255;
PORTC.OUT = 255;
PORTC.OUT = 0;
PORTC.OUTTGL = 1;
PORTC.OUTTGL = 1;
PORTC.OUTTGL = 1;
PORTC.OUTTGL = 1;
b.b1 = (PORTF.IN & (1<<6)); // tlacitko
b.b2 = (PORTF.IN & (1<<7)); // vzduch
PORTC.OUT = 255;
PORTC.OUT = 0;
if (b.b1) {
PORTC.OUT = 1; // modrá
};
if (b.b2) {
PORTC.OUT = 1<<3; // žlutá
};
PORTC.OUT = 255;
PORTC.OUT = 0;
PORTC.OUT = 255;
PORTC.OUT = 0;
}
}
--------------------
Dílky na osciloskopu 250 ns
Nula okolo b.b1= a b.b2= to trvá něco asi 1,2 dílku
Oblast s if trvá taky asi 1,2 dílu, žluté pulzy mají stejně jako při
opakování OUTTGL, modré o něco víc, nebo asi 0,9 dílku když je neukončí
žlutej.
Data mem usage 0, program 300
je jedno zda je deklarace global nebo local.
Překlad:
-------------------
mini-float-test-avr64dd32.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00806000 00806000 00000180 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 0000012c 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .comment 00000030 00000000 00000000 00000180 2**0
CONTENTS, READONLY
3 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 000001b0 2**2
CONTENTS, READONLY
4 .debug_info 00001fac 00000000 00000000 000001ec 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_abbrev 00001dfe 00000000 00000000 00002198 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_line 0000016f 00000000 00000000 00003f96 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_str 00000dee 00000000 00000000 00004105 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 48 00 jmp 0x90 ; 0x90 <__ctors_end>
4: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
8: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
10: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
14: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
18: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
1c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
20: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
24: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
28: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
2c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
30: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
34: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
38: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
3c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
40: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
44: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
48: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
4c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
50: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
54: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
58: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
5c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
60: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
64: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
68: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
6c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
70: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
74: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
78: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
7c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
80: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
84: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
88: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
8c: 0c 94 52 00 jmp 0xa4 ; 0xa4 <__bad_interrupt>
00000090 <__ctors_end>:
90: 11 24 eor r1, r1
92: 1f be out 0x3f, r1 ; 63
94: cf ef ldi r28, 0xFF ; 255
96: cd bf out 0x3d, r28 ; 61
98: df e7 ldi r29, 0x7F ; 127
9a: de bf out 0x3e, r29 ; 62
9c: 0e 94 54 00 call 0xa8 ; 0xa8 <main>
a0: 0c 94 94 00 jmp 0x128 ; 0x128 <_exit>
000000a4 <__bad_interrupt>:
a4: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000a8 <main>:
a8: 88 ed ldi r24, 0xD8 ; 216
aa: 90 e0 ldi r25, 0x00 ; 0
ac: 84 bf out 0x34, r24 ; 52
ae: 90 93 60 00 sts 0x0060, r25 ; 0x800060
<__TEXT_REGION_LENGTH__+0x7f0060>
b2: 84 bf out 0x34, r24 ; 52
b4: 90 93 61 00 sts 0x0061, r25 ; 0x800061
<__TEXT_REGION_LENGTH__+0x7f0061>
b8: 24 ea ldi r18, 0xA4 ; 164
ba: 30 e0 ldi r19, 0x00 ; 0
bc: 84 bf out 0x34, r24 ; 52
be: 20 93 68 00 sts 0x0068, r18 ; 0x800068
<__TEXT_REGION_LENGTH__+0x7f0068>
c2: 8f ef ldi r24, 0xFF ; 255
c4: 80 93 40 04 sts 0x0440, r24 ; 0x800440
<__TEXT_REGION_LENGTH__+0x7f0440>
c8: 8f e3 ldi r24, 0x3F ; 63
ca: 80 93 a0 04 sts 0x04A0, r24 ; 0x8004a0
<__TEXT_REGION_LENGTH__+0x7f04a0>
ce: 88 e0 ldi r24, 0x08 ; 8
d0: 80 93 b6 04 sts 0x04B6, r24 ; 0x8004b6
<__TEXT_REGION_LENGTH__+0x7f04b6>
d4: 80 93 b7 04 sts 0x04B7, r24 ; 0x8004b7
<__TEXT_REGION_LENGTH__+0x7f04b7>
d8: 8f ef ldi r24, 0xFF ; 255
da: 91 e0 ldi r25, 0x01 ; 1
dc: 28 e0 ldi r18, 0x08 ; 8
de: 80 93 44 04 sts 0x0444, r24 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
e2: 80 93 44 04 sts 0x0444, r24 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
e6: 80 93 44 04 sts 0x0444, r24 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
ea: 10 92 44 04 sts 0x0444, r1 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
ee: 90 93 47 04 sts 0x0447, r25 ; 0x800447
<__TEXT_REGION_LENGTH__+0x7f0447>
f2: 90 93 47 04 sts 0x0447, r25 ; 0x800447
<__TEXT_REGION_LENGTH__+0x7f0447>
f6: 90 93 47 04 sts 0x0447, r25 ; 0x800447
<__TEXT_REGION_LENGTH__+0x7f0447>
fa: 90 93 47 04 sts 0x0447, r25 ; 0x800447
<__TEXT_REGION_LENGTH__+0x7f0447>
fe: 40 91 a8 04 lds r20, 0x04A8 ; 0x8004a8
<__TEXT_REGION_LENGTH__+0x7f04a8>
102: 30 91 a8 04 lds r19, 0x04A8 ; 0x8004a8
<__TEXT_REGION_LENGTH__+0x7f04a8>
106: 80 93 44 04 sts 0x0444, r24 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
10a: 10 92 44 04 sts 0x0444, r1 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
10e: 46 fd sbrc r20, 6
110: 90 93 44 04 sts 0x0444, r25 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
114: 37 fd sbrc r19, 7
116: 20 93 44 04 sts 0x0444, r18 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
11a: 10 92 44 04 sts 0x0444, r1 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
11e: 80 93 44 04 sts 0x0444, r24 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
122: 10 92 44 04 sts 0x0444, r1 ; 0x800444
<__TEXT_REGION_LENGTH__+0x7f0444>
126: db cf rjmp .-74 ; 0xde <main+0x36>
00000128 <_exit>:
128: f8 94 cli
0000012a <__stop_program>:
12a: ff cf rjmp .-2 ; 0x12a <__stop_program>
-------------------
PH
Dne 24.04.2024 v 19:43 Martin Záruba napsal(a):
>
> Byv vychován assemblerem a zoufalým nedostatkem paměti, vymýšlel jsem,
> třeba na AT89C4051 různé úsporné formáty.
>
> Proměnná b (viz níže) zabírá zjevně jen jeden byte, což lze zjistit
> snadno přes sizeof(b) a lze do ní uložit 8 ANO/NE, které budou
> POJMENOVANÉ a tedy srozumitelné.
>
> Můžete někdo zkusit, jak se přeloží na AT Mega tento kód? Zda je
> rozumné něco takového použít?
>
> struct{
> boolb1:1;
> boolb2:1;
> }b;
> if(b.b1){};
> Martin Záruba
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240424/10a7ba19/attachment-0001.htm>
Další informace o konferenci Hw-list