Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запись во внешнюю память
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Slowhan
Что-то совсем тупик, выручайте...

Пишу во внешнюю SDRAM. Все было хорошо, до этого места:
Код
              *(unsigned short*)(0xA009603E) = 1300;    
              *(unsigned short*)(0xA0096040) = 7001;
              *(float*)(0xA0096042) = 4.1;


При записи двух unsigned short все хорошо, как только начинаю писать float - он затирает последний unsigned short. Т.е. как будто записывается с адреса 0xA0096040. Помогите понять, в чем дело, пожалуйста.
aaarrr
Цитата(Slowhan @ Jul 18 2011, 16:29) *
Помогите понять, в чем дело, пожалуйста.

В выравнивании, надо полагать. 0xA0096042 % 4 = 2.
Slowhan
Цитата(aaarrr @ Jul 18 2011, 16:44) *
В выравнивании, надо полагать. 0xA0096042 % 4 = 2.

И как же быть, если по 0xA0096042 очень нужно положить данные?..

В принципе, если писать по байтно - то все ок, Вы правы - выравнивание. Но мне нужно именно 4 байтовую переменную по этому адресу записывать...
Писать функцию, которая бы мой float писала по 4 байта считаю извращением, можно ли это как-то обойти?
aaarrr
Цитата(Slowhan @ Jul 18 2011, 16:56) *
Писать функцию, которая бы мой float писала по 4 байта считаю извращением, можно ли это как-то обойти?

Нет, писать не нужно, нужно попросить компилятор. Скажем, Keil'у достаточно сказать __packed float, для остальных смотрите документацию.
Slowhan
Цитата(aaarrr @ Jul 18 2011, 17:29) *
Скажем, Keil'у достаточно сказать __packed float, для остальных смотрите документацию.

Спасибо, работает!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.