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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Сохранение переменных после сброса
kollega
сообщение Nov 29 2006, 10:58
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 9-06-05
Пользователь №: 5 869



Доброе время суток!
Как компилятору CodeVision запретить начальную инициализацию некоторых переменных?
Я так понимаю, что это аналог опции __no_init для IAR'а, но в кодевижине такого не нашёл sad.gif

Сохранение в EEPROM, контроль питания и пр. не предлагать - мне нужно просто сохранённое значение некоторых переменных в ОЗУ именно после сброса.
Go to the top of the page
 
+Quote Post
aahardsoft
сообщение Nov 29 2006, 17:46
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 29-07-05
Пользователь №: 7 189



не знаю как там в С это делаеться но вообще есть флаги которые указывают на то что был именно сброс и какой сброс после чего и т.д.,думаю нужно посмотреть на них и принять решение инициализировать переменные или нет.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 29 2006, 19:10
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



А я непонял а зачем это нада вам?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 29 2006, 19:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zorromen @ Nov 29 2006, 19:10) *
А я непонял а зачем это нада вам?


Чтобы контроллер продолжал работу после сброса без потери данных. Обычно это используется в случае действия помех. Во всяком случае для этого использую я smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
WHALE
сообщение Nov 29 2006, 22:08
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Confugure Project->C Compiler-поставьте галочку Us an external startup initialization file.В качестве инициализационного файла возмите его-же старт-ап файл и грохните там обнуление интересующих вас
переменных.
Тока наверное вначале нуна будет сделать анализ причины рестарта и действовать в соответствии с этим.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
kollega
сообщение Nov 30 2006, 09:17
Сообщение #6





Группа: Новичок
Сообщений: 6
Регистрация: 9-06-05
Пользователь №: 5 869



Цитата
не знаю как там в С это делаеться но вообще есть флаги которые указывают на то что был именно сброс и какой сброс после чего и т.д.,думаю нужно посмотреть на них и принять решение инициализировать переменные или нет.

Немного не по теме Ваш ответ - с источником сброса и необходимостью инициализации я разбираюсь отдельно. Мне нужно именно ЗАПРЕТИТЬ компилятору обнулять некоторые, указанные мною, переменные.

Цитата
А я непонял а зачем это нада вам?

Ну НАДА мне. НАДА!!! wink.gif


Цитата
Confugure Project->C Compiler-поставьте галочку Us an external startup initialization file.В качестве инициализационного файла возмите его-же старт-ап файл и грохните там обнуление интересующих вас
переменных.

В файле startup.asm обнуляются не конкретные переменные, а область ОЗУ (в цикле) - т.е. конкретные переменные не выловишь. Можно вообще запретить полностью обнуление, а в Си-шном исходнике напрямую присваивать первоначальные значения переменным. А те, которые нужно сохранять после сброса, не инициализировать... Но, согласитесь, это вульгарно - возвращаемся к методам работы на ассме sad.gif
Go to the top of the page
 
+Quote Post
Abell
сообщение Nov 30 2006, 10:31
Сообщение #7


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Интересный вопрос... В курсе, что после сброса в памяти может оказаться не совсем то, что ранее туда записали? Ну, а если есть желание попробовать... Выясните, какая область памяти содержит интересующие вас переменные, и в начале программы (до инициализации и разрешения прерываний) вставьте кусок ассемблерного кода, читающий этот блок одним большим куском в другую, допустим, область. После этого можно объявлять переменные и инициализировать их значениями из прочитанного блока. Если непонятно, предъявите вашу программку для более детального изучения.


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post
_Bill
сообщение Nov 30 2006, 10:59
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(kollega @ Nov 30 2006, 09:17) *
В файле startup.asm обнуляются не конкретные переменные, а область ОЗУ (в цикле) - т.е. конкретные переменные не выловишь. Можно вообще запретить полностью обнуление, а в Си-шном исходнике напрямую присваивать первоначальные значения переменным. А те, которые нужно сохранять после сброса, не инициализировать... Но, согласитесь, это вульгарно - возвращаемся к методам работы на ассме sad.gif

Отредактируйте startup.asm соответствующим образом. Какие проблемы?
Второй вариант - сохранять нужные переменные в EEPROM.
Go to the top of the page
 
+Quote Post
Семён
сообщение Nov 30 2006, 11:15
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



ИМХО: Если фирма изготовитель не регламентирует сохранность памяти после сброса, то в разработку нельзя вкладывать возможность сохранения в ОЗУ промежуточных данных, требующихся для работы системы, в противном случаи надежность работы Вашей системы напрямую будет зависеть от внешних факторов. Сам сталкивался с такой проблемой. Лучше переработайте алгоритм и храните эти данные в EEPROM. Если есть внешняя память, то лучше в ней.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 30 2006, 12:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Семён @ Nov 30 2006, 11:15) *
ИМХО: Если фирма изготовитель не регламентирует сохранность памяти после сброса, то в разработку нельзя вкладывать возможность сохранения в ОЗУ промежуточных данных, требующихся для работы системы, в противном случаи надежность работы Вашей системы напрямую будет зависеть от внешних факторов. Сам сталкивался с такой проблемой. Лучше переработайте алгоритм и храните эти данные в EEPROM. Если есть внешняя память, то лучше в ней.

А на каком контроллере сталкивались?
Я оказался в безвыходной ситуации из-за ESD и за ночь переписал структуру софта. На испытаниях сбои происходили приблизительно раз в пять секунд, тест длился около получаса - на MSP430 работает. Что гарантируется - даже не искал. Валидность критических значений проверяю, но специальных мер типа контрольной суммы нет. С АВР не пробовал, хотелось бы знать help.gif
Сохранение данный в EEPROM существует, но это не может помочь в случае помехи - она слишком коротка, срабатывает внешний супервизор питания и ффсе.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Семён
сообщение Nov 30 2006, 12:30
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Цитата(Dog Pawlowa @ Nov 30 2006, 12:09) *
А на каком контроллере сталкивались?

Сталкивался конкретно на ATTiny2313 и ATMega8 (софт один и тотже написанный на ассемблере). Также были проблемы с ATMega8515 (код на «С»). Сбой происходит не каждый раз, но на столе добиться можно, закономерность мне вывести не удалось, поэтому пришлось переписывать алгоритм, идя на компромисс. С другими пока подобных задач не было, поэтому не знаю.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
muravei
сообщение Nov 30 2006, 15:54
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Dog Pawlowa @ Nov 30 2006, 12:09) *
она слишком коротка, срабатывает внешний супервизор питания и ффсе.

Так, может, убрать его , собаку, чтоб не срабатывал.smile.gif Настроить Brown-out Reset.
И фильтр по питанию.И ффсе.
А то так можно начать подстраивать программы под сглазsmile.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 30 2006, 16:36
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(muravei @ Nov 30 2006, 15:54) *
А то так можно начать подстраивать программы под сглазsmile.gif

Хорошее сравнение smile.gif
А убрать супервизор в MSP430F1XX (если помните, я о MSP говорил), нельзя, так как доказано неоднократно, что будет слетать флэш. Фильтр по питанию не помогал, система получилась с висящими антеннами, которые ловили включение света, например. Была поначалу версия без супервизора и WDT - залил больницу мыльным раствором w00t.gif
Поэтому меня AVR и интересует в этом плане. Но то, что говорит Семен, не радует unsure.gif
Остается только самому Мегу потерзать.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Семён
сообщение Nov 30 2006, 16:50
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Если позволяет бюджет ставите Mega8515 c внешним ОЗУ и аварийным питанием, например ионистором.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
muravei
сообщение Nov 30 2006, 17:49
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Dog Pawlowa @ Nov 30 2006, 16:36) *
система получилась с висящими антеннами, которые ловили включение света, например.

Надо навесить LC фильтры на длинные провода.
Go to the top of the page
 
+Quote Post

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

 


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


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