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