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

 
 
> Самопроизвольное изменение значения переменной
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 26 2011, 08:09
Сообщение #2





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



Извините, бес попутал.
xdata - это конечно же оперативная память.

Код
// адрес, куда сохранить значение во флэше
#define  a_v5  0xf3a8

// во флэш-памяти
code int c_v5 _at_ a_v5;

// в оперативке
xdata int v5 = 2;


void WriteFlash(void)
{
    char xdata EA_save=EA;
    EA=0;
    SFRPAGE = 0x00;
    FLSCL=0x21;
    
    PSCTL=1;

    *((int xdata*)a_v5)=(int)v5;
    
    // тут дальше аналогичный код для других переменных...
    
    
    PSCTL=0;
    FLSCL=0x20;

    EA=EA_save;
}


void ReadFlash(void)
{
    char xdata EA_save=EA;
    EA=0;

    SFRPAGE = 0x00;
    FLSCL=0x21;

    v5 = (int)c_v5;        // <- вот в этом месте портится значение переменной v5
    
    FLSCL=0x20;
    EA=EA_save;
}


Когда пользователь решил изменить эту переменную, он вводит значение в v5,
после этого вызывается WriteFlash, пишущий это значение по определенному адресу во флэш-память. При включении прибора вызывается функция ReadFlash,
копирующая из флэш в оперативку все переменные.

Сообщение отредактировал jdhfdg - Sep 26 2011, 08:10
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 26 2011, 09:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Из Ваших путанных объяснений непонятно: в какой момент и при каких условиях портятся данные.
Судя по посту выше: при чтении переменной из flash - читается не то значение, которое туда ранее было записано. Видется 2 варианта почему так может происходить:
1. Процедура записи - не верна (тут я ничего подсказать не могу, т.к. с этим МК не работал). Но это можно проверить: записать программно во flash заранее известные данные, а затем проверить память (flash), считав её программатором и сравнить с тем, что туда писалось...
2. Обнуление переменной происходит при "заливке" программы в МК, т.к., обычно, перед программированием памяти программ производится её (памяти) очистка, а значит - стирается и область flash в которую Вы сохранили переменные.
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
- - 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
- - jdhfdg   Есть функция, которая пишет данные из ОЗУ во FLASH...   Sep 27 2011, 20:23
|- - barabek   Цитата(jdhfdg @ Sep 28 2011, 07:23) Есть ...   Sep 27 2011, 22:33
- - редактор   Уточнение - какая модель памяти используется, если...   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:54
Рейтинг@Mail.ru


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