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

 
 
 
Reply to this topicStart new topic
> Запись во внешнюю память, перезаписываются данные...
Slowhan
сообщение Jul 18 2011, 12:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788



Что-то совсем тупик, выручайте...

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


При записи двух unsigned short все хорошо, как только начинаю писать float - он затирает последний unsigned short. Т.е. как будто записывается с адреса 0xA0096040. Помогите понять, в чем дело, пожалуйста.

Сообщение отредактировал Slowhan - Jul 18 2011, 12:34
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 18 2011, 12:44
Сообщение #2


Гуру
******

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



Цитата(Slowhan @ Jul 18 2011, 16:29) *
Помогите понять, в чем дело, пожалуйста.

В выравнивании, надо полагать. 0xA0096042 % 4 = 2.
Go to the top of the page
 
+Quote Post
Slowhan
сообщение Jul 18 2011, 12:56
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788



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

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

В принципе, если писать по байтно - то все ок, Вы правы - выравнивание. Но мне нужно именно 4 байтовую переменную по этому адресу записывать...
Писать функцию, которая бы мой float писала по 4 байта считаю извращением, можно ли это как-то обойти?

Сообщение отредактировал Slowhan - Jul 18 2011, 12:57
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 18 2011, 13:29
Сообщение #4


Гуру
******

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



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

Нет, писать не нужно, нужно попросить компилятор. Скажем, Keil'у достаточно сказать __packed float, для остальных смотрите документацию.
Go to the top of the page
 
+Quote Post
Slowhan
сообщение Jul 19 2011, 04:06
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 20-06-11
Из: Ленино
Пользователь №: 65 788



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

Спасибо, работает!
Go to the top of the page
 
+Quote Post

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

 


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


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