<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>