Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Вопросы stmfaq

Непрочитано 02.05.2013, 09:40  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
Лампочка Вопросы stmfaq

В моей программе много глобальных массивов констант, можно ли их разместить в eeprom ? На AVR это можно было делать а как это сделать в STM8S105? Если можно разместить, то как это может повлиять на скорость и стабильность выполнение программы, или лучше этого не делать?
Реклама:
stmfaq вне форума  
Непрочитано 02.05.2013, 11:29  
a-fisher
Прописка
 
Аватар для a-fisher
 
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
a-fisher на пути к лучшему
По умолчанию Re: FAQ по STM8

На STM нету EEPROM, можно размещать в памяти программ или подключить внешний EEPROM по I2C
a-fisher вне форума  
Непрочитано 02.05.2013, 11:42  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
можно ли их разместить в eeprom ? На AVR это можно было делать а как это сделать в STM8S105?
Да точно также - указав соответствующий storage modifier. Смотрите __eeprom в хэлпе компилятора:

__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 02.05.2013 в 11:45.
tempora вне форума  
Эти 2 пользователя(ей) сказали Спасибо tempora за это сообщение:
stmfaq (02.05.2013), _Слон_ (04.05.2013)
Непрочитано 02.05.2013, 11:47  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от a-fisher Посмотреть сообщение
На STM нету EEPROM, можно размещать в памяти программ или подключить внешний EEPROM по I2C
Ты не прав, Федя! STM8S003, STM8S103...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 02.05.2013, 16:09  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от tempora Посмотреть сообщение
Да точно также - указав соответствующий storage modifier. Смотрите __eeprom в хэлпе компилятора:
Посмотрел но не сильно разобрался .
Сделал так
Код:
__eeprom unsigned char md5crypt [4][64]={.............
Компилятор выругался Error[Ta004]: __eeprom variable must be __no_init

Посмотрел что это такое,ниже прикрепил описание,я так понял что так нельзя обьявлять переменную , а нужно что то типа такого
Код:
unsigned char md5crypt[4][64] @ "eeprom" = {....
Но для такого объявления нужно что то настроить в линкере, что я так и не понял. Есть ли вообще смысл пихать глобальные константы в eeprom ? Дело в том что у меня уже много места занято под глобальные переменные, а написано только 50% программы. Поэтому решил перетащить их в EEPROM .
Обьясните пожалуйста на пальцах, что нужно настроить в IAR , чтобы можно было размещать глобальные переменные в EEPROM таким образом
Код:
unsigned char md5crypt[4][64] @ "eeprom" = {....
? А то из описаний на англ языке не сильно понятно что делать.
Миниатюры:
Нажмите на изображение для увеличения
Название: eepromstm8s.jpg
Просмотров: 69
Размер:	78.2 Кб
ID:	46444  

Последний раз редактировалось stmfaq; 02.05.2013 в 16:12.
stmfaq вне форума  
Непрочитано 02.05.2013, 16:38  
s64
Временная регистрация
 
Регистрация: 08.02.2010
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 14 раз(а) в 12 сообщении(ях)
s64 на пути к лучшему
По умолчанию Re: FAQ по STM8

компилятор вам правильно говорит - он не может инициализировать переменную в EEPROM, поэтому ее нужно обьявлять как __no_init , а где то в основном цикле инициализировать(перед этим разрешить запись в EEPROM)
s64 вне форума  
Сказали "Спасибо" s64
stmfaq (02.05.2013)
Непрочитано 02.05.2013, 17:04  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от s64 Посмотреть сообщение
поэтому ее нужно обьявлять как __no_init , а где то в основном цикле инициализировать(перед этим разрешить запись в EEPROM)
Так что делать нужно так __no_init unsigned char md5crypt [4][64]={..
?
а как инициализировать? Пример можно?
А если мне не нужно изменять значение констант , зачем нужно разрешать запись в eeprom ? И если это нужно то как разрешить без использования SPL, что в какой регистр нужно записать?
stmfaq вне форума  
Непрочитано 02.05.2013, 17:18  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
Так что делать нужно так __no_init unsigned char md5crypt [4][64]={..
?
а как инициализировать? Пример можно?
А если мне не нужно изменять значение констант , зачем нужно разрешать запись в eeprom ? И если это нужно то как разрешить без использования SPL, что в какой регистр нужно записать?
Путь непрост и тернист.
Нужны кое-какие знания и понимание структуры HEX-файлов.
Абстрагируясь от МК вообще, нужно сгенерировать массив данных, которые предполагается хранить в eeprom. Затем преобразовать в hex-формат. И наконец, используя STVP загрузить это файл и записать его в адреса по закладке DATA. Эти данные будут доступны для чтения и недоступны для модификации без принятия особой меры по разблокировке этой области памяти на запись.
Иначе в самом начале программы придется переписывать данные из выделенной части флеша в область eeprom (через эту самую разблокировку с последующей блокировкой) и смирится с поетрянной частью флеша, которая могла бы быть занята кодом.
Если данных для хранения немного, то можно их записать вручную прямо в среде STVP. Та еще работка.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
stmfaq (02.05.2013)
Непрочитано 02.05.2013, 17:31  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
Есть ли вообще смысл пихать глобальные константы в eeprom ? Дело в том что у меня уже много места занято под глобальные переменные, а написано только 50% программы.
Смысл писать что-то в EEPROM возникает только когда это настроечные данные, то есть - подлежат изменению во время работы (калибровочные константы, запомненные последние режимы и т.д.). Если же это константы, то проще держать их во флеши, тем более, что EEPROM'а-то не шибко много, значительно меньше, чем флеши.

В приведенной цитате из "Technical Note 32477" написано, что в настоящий момент не реализованы поцедуры инициализации данных, размещенных в EEPROM, то есть, данные там должны быть записаны заранее, а в программе они д.б. объявлены как __no_init. Далее обещается, что такие процедуры будут реализованы в следующих версиях, однако, Вам от этих следующих версий не будет никакого проку, поскольку Ваши данные - константы. То есть, по существу, эти следующие версии будут уметь переписывать инициализированные данные из флеши (куда компилятор поместит их двоичный образ) в еепром, чтобы там они могли быть изменены работающей программой. То есть, эти данные займут место и во флеши (там расположен их образ), и в еепроме, куда они могут быть скопированы процедурами инициализации сегментов памяти. Таким образом, удвоенный объем занимаемый этими данными в кристалле - это цена за возможность их и автоматически инициализировать и менять программно.

Ваша же цель, как я понял, совсем другая - убрать из ОЗУ константы, которые ни инициализации, ни изменению не подлежат, поэтому, либо объявляете эти данные "__eeprom __no_init" и записываете их в еепром заранее самостоятельно (возникнет проблема ручного распределения памяти), либо держите свои константы в памяти программ.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 02.05.2013, 17:33  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Жесть какая. Я думал что просто перед массивом констант поставлю модификатор и скомпилирую прошью МК и все дела. У меня табличных данных очень много, порядка 1000 кбайт. Ручной набор отпадает. Я вот не пойму есть у меня допустим массив unsigned char hash [40],я его преобразую в HEX файл? прошиваю , а как потом программа поймет где находится мой массив в eeprom ? или перед массивом указывается заголовок с названием моего массива? Чувствую я этого не осилю, наверно придется отказаться от некоторых функций девайса, иначе я все не впихну, жаль планы были грандиозные но кишка тонка.
stmfaq вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по проекту Kurbash Proteus 0 30.03.2013 17:35
Вопросы по RS485 Zemlyanov Микроконтроллеры, АЦП, память и т.д 49 09.12.2011 23:26
9v AC -> 3.5v DC. Вопросы valentinindi Источники питания и свет 48 06.10.2010 23:24
Вопросы о разном. AMilyushin Отвлекитесь, эмбеддеры! 4 17.01.2009 21:40
Вопросы по Си. Zemlyanov Proteus, KiCAD и другие ECAD 5 20.11.2006 15:36


Часовой пояс GMT +4, время: 20:47.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.