|
Сохранение переменных после сброса |
|
|
|
Nov 29 2006, 10:58
|
Группа: Новичок
Сообщений: 6
Регистрация: 9-06-05
Пользователь №: 5 869

|
Доброе время суток! Как компилятору CodeVision запретить начальную инициализацию некоторых переменных? Я так понимаю, что это аналог опции __no_init для IAR'а, но в кодевижине такого не нашёл Сохранение в EEPROM, контроль питания и пр. не предлагать - мне нужно просто сохранённое значение некоторых переменных в ОЗУ именно после сброса.
|
|
|
|
|
Nov 29 2006, 17:46
|
Участник

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

|
не знаю как там в С это делаеться но вообще есть флаги которые указывают на то что был именно сброс и какой сброс после чего и т.д.,думаю нужно посмотреть на них и принять решение инициализировать переменные или нет.
|
|
|
|
|
Nov 30 2006, 09:17
|
Группа: Новичок
Сообщений: 6
Регистрация: 9-06-05
Пользователь №: 5 869

|
Цитата не знаю как там в С это делаеться но вообще есть флаги которые указывают на то что был именно сброс и какой сброс после чего и т.д.,думаю нужно посмотреть на них и принять решение инициализировать переменные или нет. Немного не по теме Ваш ответ - с источником сброса и необходимостью инициализации я разбираюсь отдельно. Мне нужно именно ЗАПРЕТИТЬ компилятору обнулять некоторые, указанные мною, переменные. Цитата А я непонял а зачем это нада вам? Ну НАДА мне. НАДА!!!  Цитата Confugure Project->C Compiler-поставьте галочку Us an external startup initialization file.В качестве инициализационного файла возмите его-же старт-ап файл и грохните там обнуление интересующих вас переменных. В файле startup.asm обнуляются не конкретные переменные, а область ОЗУ (в цикле) - т.е. конкретные переменные не выловишь. Можно вообще запретить полностью обнуление, а в Си-шном исходнике напрямую присваивать первоначальные значения переменным. А те, которые нужно сохранять после сброса, не инициализировать... Но, согласитесь, это вульгарно - возвращаемся к методам работы на ассме
|
|
|
|
|
Nov 30 2006, 10:31
|

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

|
Интересный вопрос... В курсе, что после сброса в памяти может оказаться не совсем то, что ранее туда записали? Ну, а если есть желание попробовать... Выясните, какая область памяти содержит интересующие вас переменные, и в начале программы (до инициализации и разрешения прерываний) вставьте кусок ассемблерного кода, читающий этот блок одним большим куском в другую, допустим, область. После этого можно объявлять переменные и инициализировать их значениями из прочитанного блока. Если непонятно, предъявите вашу программку для более детального изучения.
--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...  
|
|
|
|
|
Nov 30 2006, 10:59
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(kollega @ Nov 30 2006, 09:17)  В файле startup.asm обнуляются не конкретные переменные, а область ОЗУ (в цикле) - т.е. конкретные переменные не выловишь. Можно вообще запретить полностью обнуление, а в Си-шном исходнике напрямую присваивать первоначальные значения переменным. А те, которые нужно сохранять после сброса, не инициализировать... Но, согласитесь, это вульгарно - возвращаемся к методам работы на ассме  Отредактируйте startup.asm соответствующим образом. Какие проблемы? Второй вариант - сохранять нужные переменные в EEPROM.
|
|
|
|
|
Nov 30 2006, 11:15
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
ИМХО: Если фирма изготовитель не регламентирует сохранность памяти после сброса, то в разработку нельзя вкладывать возможность сохранения в ОЗУ промежуточных данных, требующихся для работы системы, в противном случаи надежность работы Вашей системы напрямую будет зависеть от внешних факторов. Сам сталкивался с такой проблемой. Лучше переработайте алгоритм и храните эти данные в EEPROM. Если есть внешняя память, то лучше в ней.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Nov 30 2006, 12:09
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Семён @ Nov 30 2006, 11:15)  ИМХО: Если фирма изготовитель не регламентирует сохранность памяти после сброса, то в разработку нельзя вкладывать возможность сохранения в ОЗУ промежуточных данных, требующихся для работы системы, в противном случаи надежность работы Вашей системы напрямую будет зависеть от внешних факторов. Сам сталкивался с такой проблемой. Лучше переработайте алгоритм и храните эти данные в EEPROM. Если есть внешняя память, то лучше в ней. А на каком контроллере сталкивались? Я оказался в безвыходной ситуации из-за ESD и за ночь переписал структуру софта. На испытаниях сбои происходили приблизительно раз в пять секунд, тест длился около получаса - на MSP430 работает. Что гарантируется - даже не искал. Валидность критических значений проверяю, но специальных мер типа контрольной суммы нет. С АВР не пробовал, хотелось бы знать Сохранение данный в EEPROM существует, но это не может помочь в случае помехи - она слишком коротка, срабатывает внешний супервизор питания и ффсе.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Nov 30 2006, 12:30
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(Dog Pawlowa @ Nov 30 2006, 12:09)  А на каком контроллере сталкивались? Сталкивался конкретно на ATTiny2313 и ATMega8 (софт один и тотже написанный на ассемблере). Также были проблемы с ATMega8515 (код на «С»). Сбой происходит не каждый раз, но на столе добиться можно, закономерность мне вывести не удалось, поэтому пришлось переписывать алгоритм, идя на компромисс. С другими пока подобных задач не было, поэтому не знаю.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Nov 30 2006, 16:36
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(muravei @ Nov 30 2006, 15:54)  А то так можно начать подстраивать программы под сглаз  Хорошее сравнение А убрать супервизор в MSP430F1XX (если помните, я о MSP говорил), нельзя, так как доказано неоднократно, что будет слетать флэш. Фильтр по питанию не помогал, система получилась с висящими антеннами, которые ловили включение света, например. Была поначалу версия без супервизора и WDT - залил больницу мыльным раствором Поэтому меня AVR и интересует в этом плане. Но то, что говорит Семен, не радует Остается только самому Мегу потерзать.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Nov 30 2006, 16:50
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Если позволяет бюджет ставите Mega8515 c внешним ОЗУ и аварийным питанием, например ионистором.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|