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

 
 
> Самопроизвольное изменение значения переменной
jdhfdg
сообщение Sep 25 2011, 12:44
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 25-09-11
Пользователь №: 67 366



Я объявил глобальную переменную в области xdata и инициализировал ее значением 2.
После инициализации проверил - все в порядке, там записано число 2.
Через некоторое время снова проверил ее значение - оно оказалось -1.
В коде присвоения к этой переменной нигде больше нет.

Тогда как такое возможно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jdhfdg
сообщение Sep 27 2011, 20:23
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 25-09-11
Пользователь №: 67 366



Есть функция, которая пишет данные из ОЗУ во FLASH.
Если вызываю эту функцию в одном месте программы (в начале), то после этого во FLASH оказываются актуальные данные вперемешку с неправильными данными - чаще нулевые значения (или иногда старые данные, которые записывал туда неделю назад, т.е. те которые когда-то там были).

Если вызываю ЭТУ ЖЕ функцию в другом месте программы - работает, пишутся актуальные данные!
То есть одна и та же функция, если вызывать ее из разных частей программы, ведет себя по-разному - то работает абсолютно адекватно, то наоборот.

Может где-то какие-то регистры залочены и запись не срабатывает?
Может в какие-то моменты времени нельзя писать во флэш? Если вы знаете, объясните этот момент.

И еще, обязательно ли записывать данные побайтно?
Можно ли целиком float или int значение сразу писать, как в коде, который я показывал? Или надо обязательно разбивать на отдельные байты?
Вот тут только пример для записи побайтно, а мне нужно отдельными переменными сохранять.
http://www.efo.ru/doc/Silabs/Silabs.pl?2050

Сообщение отредактировал jdhfdg - Sep 27 2011, 20:27
Go to the top of the page
 
+Quote Post
barabek
сообщение Sep 27 2011, 22:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(jdhfdg @ Sep 28 2011, 07:23) *
Есть функция, которая пишет данные из ОЗУ во FLASH.
Если вызываю эту функцию в одном месте программы (в начале), то после этого во FLASH оказываются актуальные данные вперемешку с неправильными данными - чаще нулевые значения (или иногда старые данные, которые записывал туда неделю назад, т.е. те которые когда-то там были).

Если вызываю ЭТУ ЖЕ функцию в другом месте программы - работает, пишутся актуальные данные!
То есть одна и та же функция, если вызывать ее из разных частей программы, ведет себя по-разному - то работает абсолютно адекватно, то наоборот.

Может где-то какие-то регистры залочены и запись не срабатывает?

Чем дальше в лес, тем толще партизаны sm.gif. Вы флэш перед использованием стираете? Проверили причину сброса? Должна быть всегда последняя причина сброса по питанию. У Вас так? Можно в самом коде вначале определять причину сброса и зацикливаться , чтобы отловить. Может у Вас вотчдог или еще какая гадость...

UPD. А для чего у Вас такая сложная функция чтения из флэш? Читать же можно гораэдо проще. Это равносильно, что вы при компиляции объявили переменную с модификатором "code". Соответсвенно просто заведите указатель на код типа:
Код
    char code* val_ptr;
//далее, например, понадобилось нам достать флоат в объявленную ранее data_float из адреса 0x7c00
    val_ptr=0x7c00;
    data_float=*(float*)val_ptr;

А в общем-то можно вообще не заводить эту пустую переменную и сделать:
Код
data_float=*(float*)0x7c00;

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jdhfdg   Самопроизвольное изменение значения переменной   Sep 25 2011, 12:44
- - Палыч   Цитата(jdhfdg @ Sep 25 2011, 16:44) Тогда...   Sep 25 2011, 13:40
- - jdhfdg   Микроконтроллер Silicon Laboratories C8051F126 xd...   Sep 25 2011, 15:32
|- - Палыч   Цитата(jdhfdg @ Sep 25 2011, 19:32) xdata...   Sep 25 2011, 16:36
|- - barabek   Цитата(Палыч @ Sep 26 2011, 03:36) Значен...   Sep 26 2011, 02:41
|- - Палыч   Цитата(barabek @ Sep 26 2011, 06:41) Очен...   Sep 26 2011, 05:22
|- - barabek   Цитата(Палыч @ Sep 26 2011, 16:22) P.S. П...   Sep 26 2011, 06:15
|- - Палыч   Цитата(barabek @ Sep 26 2011, 10:15) Про ...   Sep 26 2011, 06:27
- - jdhfdg   Извините, бес попутал. xdata - это конечно же опер...   Sep 26 2011, 08:09
|- - Палыч   Из Ваших путанных объяснений непонятно: в какой мо...   Sep 26 2011, 09:35
- - ARV   если я не ошибаюсь, то xdata - это "дополните...   Sep 26 2011, 08:11
- - sergeeff   Функция записи во флеш не работает из флеш.   Sep 26 2011, 08:28
- - jdhfdg   Дело в том, что остальные переменные пишутся и счи...   Sep 26 2011, 13:51
|- - Палыч   Цитата(jdhfdg @ Sep 26 2011, 17:51) Дело ...   Sep 26 2011, 15:06
- - jdhfdg   чтобы переменные не наезжали друг на друга - я это...   Sep 26 2011, 19:25
|- - barabek   Цитата(jdhfdg @ Sep 27 2011, 06:25) ходит...   Sep 26 2011, 22:53
- - Shandy   В утилите "Silabs Flash Utility" есть за...   Sep 27 2011, 05:23
|- - barabek   Цитата(Shandy @ Sep 27 2011, 16:23) В ути...   Sep 27 2011, 10:38
- - редактор   Уточнение - какая модель памяти используется, если...   Sep 28 2011, 07:46
- - Палыч   Цитата(jdhfdg @ Sep 28 2011, 00:23) впере...   Sep 28 2011, 08:33


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

 


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


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