<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><font face="Arial">To je pěkné. Já byl kdysi (no před 40ti lety)
        zvyklý programovat v Assembleru sálového počítače a o 20let
        později v Assembleru AT89C2051, takže i když jsou tyto instrukce
        jiné, snadno jsou mi pochopitelné, ale jak získat ten výpis? Pro
        mě je to Arduino značně okrajová záležitost, spíš hračka, která
        mě zajímá. Jde nějak donutit ArduinoIde k tomuto výpisu? nebo
        lze jej někde najít po překladu?</font><br>
    </p>
    <pre class="moz-signature" cols="72">Martin Záruba</pre>
    <div class="moz-cite-prefix">Dne 31.8.2023 v 11:25 Jan Waclawek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:PC195202308311125100493f9d568b7@wekPC">
      <pre class="moz-quote-pre" wrap="">Ved pisem, zavisi od rocnika gcc a optimalizacie. Pouzil som avr-gcc 8.0 z
roku 2017 a -Os a prelozilo mi to podla ocakavania, bez FLASH a bez nul:

  16 0000 81E4                  ldi r24,lo8(65)
  17 0002 92E4                  ldi r25,lo8(66)
  18 0004 9093 0000             sts A+1,r25
  19 0008 8093 0000             sts A,r24
  20 000c 83E4                  ldi r24,lo8(67)
  21 000e 94E4                  ldi r25,lo8(68)
  22 0010 9093 0000             sts A+2+1,r25
  23 0014 8093 0000             sts A+2,r24

Akurat ze to mam zle, lebo je opacne endian... :-)
Takze by to muselo byt

 A[0] = *(int*)"BA";
 A[1] = *(int*)"DC";


</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">nenasype normalne do pole char/uint8_t pomoci memcpy...
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
memcpy() tiez stoji a pada na stupni optimalizacie, pokojne moze prekladac
vygenerovat inicializovane pole do RAM (t.j. je tam aj nula, a je
zapratana nielen FLASH ale aj RAM) a zavolat memcpy(). Konkretne
horeuvedeny prekladac vygeneroval "len" string vo FLASH a odoptimalizoval
memcpy():

   8                            .section        .rodata.str1.1,"aMS<a class="moz-txt-link-rfc2396E" href="mailto:,@progbits,19.LC0:10000042414443.string">",@progbits,1
   9                    .LC0:
  10 0000 4241 4443             .string "</a>BADC"
  10      00
  11                            .section        .text.startup,"ax<a class="moz-txt-link-rfc2396E" href="mailto:,@progbits12.globalmain14main:15/*prologue:function*/16/*framesize=0*/17/*stacksize=0*/18.L__stack_usage=019000080910000ldsr24,.LC020000490910000ldsr25,.LC0+1210008A0910000ldsr26,.LC0+222000cB0910000ldsr27,.LC0+323001080930000stsA,r2424001490930000stsA+1,r25250018A0930000stsA+2,r2626001cB0930000stsA+3,r2727.L2:28002000C0rjmp.L2Vsimnitesi,zeznovakvoliendianitebolotrebapouzitmemcpy((unsignedchar*)A,">",@progbits
  12                    .global main
  14                    main:
  15                    /* prologue: function */
  16                    /* frame size = 0 */
  17                    /* stack size = 0 */
  18                    .L__stack_usage = 0
  19 0000 8091 0000             lds r24,.LC0
  20 0004 9091 0000             lds r25,.LC0+1
  21 0008 A091 0000             lds r26,.LC0+2
  22 000c B091 0000             lds r27,.LC0+3
  23 0010 8093 0000             sts A,r24
  24 0014 9093 0000             sts A+1,r25
  25 0018 A093 0000             sts A+2,r26
  26 001c B093 0000             sts A+3,r27
  27                    .L2:
  28 0020 00C0                  rjmp .L2

Vsimnite si, ze znova kvoli endianite bolo treba pouzit 

memcpy((unsigned char *)A, "</a>BADC", 4);

co znova je otazne, ci je lepsie alebo citatelnejsie nez original.

wek


----- Original Message ---------------

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">A jako bonus bude mit flash zabranou zbytecnymi nulami...
Stejne uplne nechapu, k cemu je takova konstrukce dobra a proc se to 
nenasype normalne do pole char/uint8_t pomoci memcpy...

Dne 31.08.2023 v 11:12 Jan Waclawek napsal(a):
</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">"Lepsie" a "zrozumitelne" je relativne.

Je

A[0] = *(int*)"AB";
A[1] = *(int*)"CD";

lepsie ci zrozumitelnejsie?

A tiez je otazne, aky rocnik gcc pouzivate v tom arduine a s akymi
optimalizaciami, od toho zavisi, aky paskvil z toho prelozi.

wek

----- Original Message ---------------


</pre>
          <blockquote type="cite">
            <pre class="moz-quote-pre" wrap="">Mám pole

int A[2];

potřebuji do něj ale vloµit  čtyři znaky ABCD. Vymyslel jsem

A[0] = ('A' << 8) | 'B';
A[1] = ('C' << 8) | 'D';

nejde to nějak líp? Toto funguje, ale je to docela nesrozumitelné.

-- 

Martin Záruba

</pre>
          </blockquote>
          <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">

_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
  </body>
</html>