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

 
 
> Ламерской вопрос, массив unsigned char
Fortune
сообщение Feb 8 2007, 11:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Я с ARM еще не работал, но у меня появились вопросы.
Если обьявить массив типа unsigned char в ОЗУ
сколько будет занимать один элемент в памяти?
Можно ли сделать так, чтобы он занимал 1 байт?
Если нет, то как легче всего это сделать программно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gladov
сообщение Feb 8 2007, 22:18
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



DASM полностью прав!!! НЕ МОЖЕТ компилятор положить массив в памяти с дырками! Это противоречит всем законам языка. Я имею полное право сделать так:
Код
uchar test[10];
void test {
    char *ptr;

    //Классический вариант:
    ptr = test + 5;  
    //А теперь так:
    ptr = (uchar*)((void*)test + 5 * sizeof(uchar));
    //И вот так:
    ptr = (uchar*)((int)test + 5 * sizeof(uchar));


Кто покажет мне (и DASM'у) хоть один компилятор, у которого эти три варианта будут не одинаковы???

Хочу сказать отдельное спасибо Alex03 за правильное предупреждение, т.к. доступ через указатель к переменной, не выровненной по умолчанию на архитектуре АРМ может работать некорректно. Я с этим еще не сталкивался, но словив такой глюк, можно долго проблемы разгребать cheers.gif
Go to the top of the page
 
+Quote Post
Alex03
сообщение Feb 9 2007, 07:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(gladov @ Feb 9 2007, 00:18) *
Хочу сказать отдельное спасибо Alex03 за правильное предупреждение, т.к. доступ через указатель к переменной, не выровненной по умолчанию на архитектуре АРМ может работать некорректно. Я с этим еще не сталкивался, но словив такой глюк, можно долго проблемы разгребать cheers.gif

Угу, cheers.gif
Мне вот интересно что выдаёт первый цикл из моего примера на других компиляторах?
Кому не лень попробуйте на всяких IAR/Keil/RVDS? Только упаковку (например pragm pack(1) вместо __attribute__ ((__packed__))) надо подправить чтобы sizeof(test_struct_t)=5 было.

Интуиция мне говорит что возможно не все компиллеры такие разборчивые в этом плане как GCC. smile.gif
Go to the top of the page
 
+Quote Post
gladov
сообщение Feb 9 2007, 10:42
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(Alex03 @ Feb 9 2007, 07:05) *
Мне вот интересно что выдаёт первый цикл из моего примера на других компиляторах?
Кому не лень попробуйте на всяких IAR/Keil/RVDS? Только упаковку (например pragm pack(1) вместо __attribute__ ((__packed__))) надо подправить чтобы sizeof(test_struct_t)=5 было.

Интуиция мне говорит что возможно не все компиллеры такие разборчивые в этом плане как GCC. smile.gif


Проверил на ИАР 4.40а. На строки
Код
printf("%d: %c 0x%08X %p\n", n, data[n].uc, data[n].ui, &data[n].ui);
pui = &data[n].ui;


ругается так:
Warning[Pa039]: use of address of unaligned structure member

При работе, первый цикл проходит как положено, а во втором из printf вываливается в обработчик ABORT DATA. Почему тогда в первом случае работает я не понимаю blink.gif
Go to the top of the page
 
+Quote Post
Alex03
сообщение Feb 9 2007, 12:49
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(gladov @ Feb 9 2007, 12:42) *
ругается так:
Warning[Pa039]: use of address of unaligned structure member

При работе, первый цикл проходит как положено, а во втором из printf вываливается в обработчик ABORT DATA. Почему тогда в первом случае работает я не понимаю blink.gif

Вооо. Какой процик, я так понимаю всяко не LPC.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Fortune   Ламерской вопрос   Feb 8 2007, 11:10
- - SergeyDDD   все зависит от контроллера памяти и самой памяти г...   Feb 8 2007, 11:22
|- - Fortune   Цитата(SergeyDDD @ Feb 8 2007, 12:22) все...   Feb 8 2007, 11:26
|- - SergeyDDD   Цитата(Fortune @ Feb 8 2007, 12:26) Цитат...   Feb 8 2007, 11:57
- - etoja   При компиляции программы можно указать ключи для в...   Feb 8 2007, 11:34
- - DASM   по-моему ерунду говорите. Массив всегда будет расп...   Feb 8 2007, 12:00
|- - SergeyDDD   Цитата(DASM @ Feb 8 2007, 13:00) по-моему...   Feb 8 2007, 12:15
- - DASM   Значит компилер будет считывать 32-битное значения...   Feb 8 2007, 12:37
|- - SpiritDance   Цитата(DASM @ Feb 8 2007, 12:37) Значит к...   Feb 8 2007, 13:19
|- - Demeny   Цитата(SpiritDance @ Feb 8 2007, 13:19) Ц...   Feb 8 2007, 14:56
|- - Alex03   Цитата(Demeny @ Feb 8 2007, 16:56) Вы оба...   Feb 8 2007, 17:02
- - DASM   не важно кто, важно что для программисты массив ли...   Feb 8 2007, 13:23
- - IgorKossak   Сколько текста! Сколько времени потрачено...   Feb 8 2007, 13:38
- - DASM   ну я собсно и сказал - по барабану кто будет делат...   Feb 8 2007, 15:02
|- - Demeny   Цитата(DASM @ Feb 8 2007, 15:02) ну я соб...   Feb 8 2007, 15:34
- - SpiritDance   Ну я то под процессором имел ввиду сам мк, а не со...   Feb 8 2007, 15:49
- - DASM   "Массив char в физической памяти будет лежать...   Feb 8 2007, 15:51
|- - Demeny   Цитата(DASM @ Feb 8 2007, 15:51) "Ма...   Feb 8 2007, 16:30
- - DASM   И что ? Вы хотите сказать, что вашим шаманством я ...   Feb 8 2007, 16:39
|- - Demeny   Цитата(DASM @ Feb 8 2007, 16:39) И что ? ...   Feb 8 2007, 17:09
- - DASM   SSE4 это хорошо... а что с моим вопросом ?   Feb 8 2007, 17:05
- - DASM   мы по прежнему друг друга не понимаем. Не можете. ...   Feb 8 2007, 17:12
|- - Demeny   Цитата(DASM @ Feb 8 2007, 17:12) мы по пр...   Feb 8 2007, 17:23
- - DASM   через 13 байт. Слитно. Массива ! Будем продолж...   Feb 8 2007, 17:25
|- - Demeny   Цитата(DASM @ Feb 8 2007, 17:25) через 13...   Feb 8 2007, 17:31
|- - Kail   Цитата(DASM @ Feb 8 2007, 17:25) через 13...   Feb 8 2007, 18:03
- - DASM   я смотрел в RAM и вообще причем тут ROM-RAM. Удаля...   Feb 8 2007, 18:07
|- - Andrew2000   Help на Borland C++ Bulder: "The Data Alignm...   Feb 8 2007, 19:16
- - DASM   И чего ??? где тут слово array ? Я только structur...   Feb 8 2007, 19:20
|- - Andrew2000   Цитата(DASM @ Feb 8 2007, 19:20) И чего ?...   Feb 8 2007, 19:30
- - Alex03   По поводу игноригования младших битов адреса в ARM...   Feb 8 2007, 19:22
- - DASM   "А с точки зрения голых Сей результат должен ...   Feb 8 2007, 19:25
|- - Alex03   Цитата(DASM @ Feb 8 2007, 21:25) "А ...   Feb 8 2007, 19:45
- - DASM   ну а вот теперь сделайте из этих variables ARRAY -...   Feb 8 2007, 19:38
|- - Andrew2000   Цитата(DASM @ Feb 8 2007, 19:38) ну а вот...   Feb 9 2007, 01:36
- - DASM   ладно, возможно тут и промахнулся, и тем не менее ...   Feb 8 2007, 19:53
|- - Alex03   Цитата(DASM @ Feb 8 2007, 21:53) ладно, в...   Feb 8 2007, 20:06
- - tegumay   насчет хранения и форматирования данных в памяти э...   Feb 8 2007, 20:12
- - DASM   так... еще лучше.. кто глубже копнет :-D   Feb 8 2007, 20:14
|- - Сергей Борщ   Цитата(gladov @ Feb 9 2007, 09:42) Почему...   Feb 9 2007, 11:23
- - SpiritDance   Блин, сразу видно - DASM вернулся на форум. Ж) Из ...   Feb 9 2007, 10:08
- - DASM   да вы доки читайте ! тама написано, что это не...   Feb 9 2007, 11:19


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:35
Рейтинг@Mail.ru


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