реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ARMCC и little endian, Keil 5, LPC1778
toweroff
сообщение Mar 27 2014, 11:05
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день

Код генерится явно как 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


Ну и вопрос - куда копнуть, что сказать компилятору? sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2014, 11:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Mar 27 2014, 15:05) *
Код
unsigned char b[4];

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

то получится
Код
b[0] = 0x78
b[1] = 0x56
b[2] = 0x43
b[3] = 0x12

Это и есть Little Endian.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 27 2014, 12:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Mar 27 2014, 15:33) *
Это и есть Little Endian.

мда.. перепутал
лучше было скопипастить biggrin.gif
нужно наоборот, и, тогда, только в конкретном случае. Такое возможно?
#pragma be
не работает
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2014, 13:48
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Mar 27 2014, 16:57) *
нужно наоборот, и, тогда, только в конкретном случае. Такое возможно?

Ну, руками собрать - не годится?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 27 2014, 13:48
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Код
#include <arpa/inet.h>

unsigned char b[4];

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

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 27 2014, 13:56
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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

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

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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 27 2014, 14:14
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Mar 27 2014, 17:48) *
Ну, руками собрать - не годится?

почему? пока работает такая конструкция
Код
#define SWAP16(x)    ((U16)(((x)>>8) | ((x)<<8)))

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

Цитата(Сергей Борщ @ Mar 27 2014, 17:48) *
И ntohl() для обратного преобразования. Не годится?

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

Цитата(DpInRock @ Mar 27 2014, 17:56) *
Это просто так называемый foolproof.
Даже если компилятору приказать делать вид, что кругом big endian, результаты работы АЛУ, например, вас совсем не устроят.

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

ну вот теперь совсем все на своих местах sm.gif

всем спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016