C _ jak rozepsat řádek
Milan B.
milan na bastl.sk
Sobota Duben 27 22:13:57 CEST 2013
On 27. 4. 2013 21:49, Miroslav Mraz wrote:
> 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.
Preco "jako by"? Cierne na bielom v Cortex-M0 Device Generic User Guide:
str. 65 a ine, tykajuce sa LDR: The computed address must be divisible
by the number of bytes in the transaction,
see Address alignment on page 3-12.
str. 58 (resp. 3-12): There is no support for unaligned accesses on the
Cortex-M0 processor. Any attempt to
perform an unaligned memory access operation results in a HardFault
exception.
Vy nectete koran ... ehm dokumentaci?
Ci to mal kompilator prelozit nejako inac sa mi riesit nechce.
-m-
> 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