C _ jak rozepsat řádek

Josef Štengl ok1ced na nagano.cz
Sobota Duben 27 22:12:47 CEST 2013


Pozor, const značí že to čte z FLASH paměti. Umožňuje paměť kde je to 
zapsáno číst i liché adresy? Pokud je paměť fyzicky organizována po 16 
bitech tak to může dávat smysl. Instrukce jsou 16 nebo 32 bitů (pokud M0 
umí thumb-2), tak by to tak i mohlo být. Prostě ušetřil se jeden 
adresový vodič, možná dva. Je to relativně pomalá paměť, tak se to čte 
najednou a není důvod to kouskovat.	

Pokud smažete const tak by to mělo chodit.

Na 386 je to jinak, tak se instrukce čte ze stejného typu paměti jako data.

Dne 27.4.2013 21:49, Miroslav Mraz napsal(a):
> Když už jsme u toho C příklad:
>
> int main (void) {
>    const uint8_t  pole[] = {1,2,3,4,5,6,7,8,9,10};
>    uint8_t const* ptr = pole;
>    ptr += 1;   // dáme si tam lichou adresu
>    // takže tohle na Cortex-M0 spadne do HardFault_Handleru
>    uint32_t i = *(uint32_t*) ptr;
>    // nicméně na i386, x86_64 se to chová dle očekávání
>    printf ("i=%X\n", i);
>    // stejně jako tohle (a to chodí i na tom CM0) i=5040302
>    memcpy (&i, ptr, sizeof (uint32_t));
>    printf ("i=%X\n", i);
>    return 0;
> }
>
> Jako by instrukce ldr nesnesla lichou adresu. Ale nějak se mi nechce to
> blíž zkoumat. Tak to berte jako malý kvíz na neděli.
>
> Mrazík
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list