Перейти к содержанию
    

ARMCC и little endian

Добрый день

 

Код генерится явно как big endian

На вкладке Target чекбокс big endian серый, выключен

 

Скормил компилятору директиву --li, все равно то же самое, т.е. если

unsigned char b[4];

  *((unsigned int*)b) = 0x12345678;

то получится

b[0] = 0x78
b[1] = 0x56
b[2] = 0x43
b[3] = 0x12

 

Ну и вопрос - куда копнуть, что сказать компилятору? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

unsigned char b[4];

  *((unsigned int*)b) = 0x12345678;

то получится

b[0] = 0x78
b[1] = 0x56
b[2] = 0x43
b[3] = 0x12

Это и есть Little Endian.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это и есть Little Endian.

мда.. перепутал

лучше было скопипастить :biggrin:

нужно наоборот, и, тогда, только в конкретном случае. Такое возможно?

#pragma be

не работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно наоборот, и, тогда, только в конкретном случае. Такое возможно?

Ну, руками собрать - не годится?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <arpa/inet.h>

unsigned char b[4];

  *((unsigned int*)b) = htonl(0x12345678);

И ntohl() для обратного преобразования. Не годится?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На вкладке Target чекбокс big endian серый, выключен

Это просто так называемый foolproof.

Даже если компилятору приказать делать вид, что кругом big endian, результаты работы АЛУ, например, вас совсем не устроят.

 

Данный процессор поддерживает big endian исключительно в DMA и LCD. ПО вполне понятным причинам. Разные бывают внешние устройства... Заточенные на big endian, например...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, руками собрать - не годится?

почему? пока работает такая конструкция

#define SWAP16(x)    ((U16)(((x)>>8) | ((x)<<8)))

мне нужны 16-разрядные числа

 

И ntohl() для обратного преобразования. Не годится?

спасибо, не знал про них

 

Это просто так называемый foolproof.

Даже если компилятору приказать делать вид, что кругом big endian, результаты работы АЛУ, например, вас совсем не устроят.

 

Данный процессор поддерживает big endian исключительно в DMA и LCD. ПО вполне понятным причинам. Разные бывают внешние устройства... Заточенные на big endian, например...

ну вот теперь совсем все на своих местах :)

 

всем спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...