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

 
 
> Запись 16bit word по нечетному адресу
dimitryl
сообщение May 12 2006, 10:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-11-05
Пользователь №: 10 786



*(char*)0x20000001=0xFF;

*(short*)0x20000001=0x8888;

кладется по адресу 0x20000000 и 0x20000001.(((

Кто нибудь может обьяснить чья это "фича" - ARMа или Кейла?
И самое главное как это обойти - массивы в памяти выделяются динамически
и гарантировать что в ходе выполнения программы адрес short будет четным
никак(((.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение May 12 2006, 11:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



1. Все memory allocator'ы выделяют "выровненные" блоки памяти. Можешь у себя это проверить выделив два блока памяти размером в байт и посмотреть на адреса соответствующих pointer'ов.
2. Если уж очень надо читать с невыровненного адреса существует специальный модификатор (по крайней мере в EVC++) - __unaligned, например - WORD __unaligned *pwD. Он нормально (только медленнее) читает с любого адреса.

Насчет Keil и прочих - не в курсе, но наверное есть что-то похожее
Go to the top of the page
 
+Quote Post



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

 


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


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