Size: a a a

2021 January 25

r

romanetz in Embedded Group
Ponytale 🇷🇺
uint16_t fletcher = (((uint16_t)buf[22]) << 8) | buf[23];
lds r18,buf+22
lds r22,buf+23
mov r25,r18
ldi r24,lo8(0)
ldi r23,lo8(0)
or r22,r24
or r23,r25
ldi r24,lo8(0)
ldi r25,hi8(0)

uint16_t fletcher = *((uint16_t *) &buf[22]);
lds r22,buf+22
lds r23,buf+22+1
-O0?
источник

r

romanetz in Embedded Group
Ponytale 🇷🇺
uint16_t fletcher = (((uint16_t)buf[22]) << 8) | buf[23];
lds r18,buf+22
lds r22,buf+23
mov r25,r18
ldi r24,lo8(0)
ldi r23,lo8(0)
or r22,r24
or r23,r25
ldi r24,lo8(0)
ldi r25,hi8(0)

uint16_t fletcher = *((uint16_t *) &buf[22]);
lds r22,buf+22
lds r23,buf+22+1
Это какой проц/компилятор?
источник

P

Ponytale 🇷🇺 in Embedded Group
romanetz
Это какой проц/компилятор?
источник

P

Ponytale 🇷🇺 in Embedded Group
-O3
источник

LZ

Leonid Zaliubovskii in Embedded Group
romanetz
Интел, арм, мипс - все LE
Например у cortex a8 cortex r8 можно переключиться межу BE and LE ☺️

Зачем, это отдельный вопрос.
источник

ED

Electronics Designer in Embedded Group
ЕМНИП у Cortex этот бит read-only. :)
источник

ED

Electronics Designer in Embedded Group
Можно синтезировать big-endian ядро, но не переключаться в рантайме. :)
источник

LZ

Leonid Zaliubovskii in Embedded Group
Да, может, я не уверен на 100. Вечером гляну доки, но кажись он implementation defined.
источник

W

Wild_Wind in Embedded Group
Ponytale 🇷🇺
поутру переделал на сдвиги. спасибо всем кто принял участие - вообще да, так проблем в будущем меньше будет.
Вот и славненько :)
источник

K

Kitnerboy Redoubt in Embedded Group
Electronics Designer
Кстати, я так подумал, можно ведь как сделать... Ну, чисто ради красоты.

uint8_t array[N];

uint16_t *ptr;

ptr = (uint16_t *)((void *)array);

...

array[k] = ...

ptr[j] = ...

Вот так должно работать. :)
ENDIANNESS
источник

K

Kitnerboy Redoubt in Embedded Group
romanetz
Вы давно BE вообще встречали вживую?
Дело же не в том, что ты конкретно не встречаешь другие ENDIANNESS, а в том, чтобы не забывать, что они другие могут быть, и подобный подход к решению задачи непереносим.
А уж как ты относишься к непереносимости - это уже твоё личное дело.
источник

K

Kitnerboy Redoubt in Embedded Group
Да и зачем вообще думать, какой у тебя endianness, если можно везде напихать ламповые ifdef?
источник

P

Ponytale 🇷🇺 in Embedded Group
*задумчево* а непереносимость непереносимости это уже переносимость или еще не совсем?😄
источник

r

romanetz in Embedded Group
Kitnerboy Redoubt
Да и зачем вообще думать, какой у тебя endianness, если можно везде напихать ламповые ifdef?
А вот это годно
источник

r

romanetz in Embedded Group
И указатели будут при деле
источник

P

Ponytale 🇷🇺 in Embedded Group
(чем мощнее становятся процики тем осторожнее си-проггеры 😄)

в самом деле, ну вот норм же было раньше привоть указатели друк к другу. можно через void* для еще бОльшей крутизны). а сейчас закидают за такое)
источник

LZ

Leonid Zaliubovskii in Embedded Group
Ponytale 🇷🇺
(чем мощнее становятся процики тем осторожнее си-проггеры 😄)

в самом деле, ну вот норм же было раньше привоть указатели друк к другу. можно через void* для еще бОльшей крутизны). а сейчас закидают за такое)
Раньше тоже не норм. А с умом приводить нужно
источник

K

Kitnerboy Redoubt in Embedded Group
Ponytale 🇷🇺
(чем мощнее становятся процики тем осторожнее си-проггеры 😄)

в самом деле, ну вот норм же было раньше привоть указатели друк к другу. можно через void* для еще бОльшей крутизны). а сейчас закидают за такое)
Раньше, когда powerPC были на коне (на них внезапно маки работали окромя кровавых серверов), за такое бы шапками закидали.
источник

P

Ponytale 🇷🇺 in Embedded Group
однажды пришлось написать самомодифицирующийся код. вообще позор да?😂
источник

P

Ponytale 🇷🇺 in Embedded Group
Kitnerboy Redoubt
Раньше, когда powerPC были на коне (на них внезапно маки работали окромя кровавых серверов), за такое бы шапками закидали.
так яблочников до сих пор закидывают)
источник