18.03.2014, 09:33
|
#1161
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Uvavan
|
Я делал та:
PHP код:
|
#pragma location=0x1000 //Наш адрес в EEPROM/flash (в данном случае - начало еепромки) __no_init uint8_t Step;
|
И потом обращаешься как к обычной переменной. Ну это конечн оесли я вопрос правильно понял .
|
Вопрос понял неправильно. Звучало "положить".
Правильный ответ - никак. И не только в плюсах, а даже в стд (о ужас!).
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
18.03.2014, 10:18
|
#1162
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от ut1wpr
|
Правильный ответ - никак
|
в последнем ИАРе есть пример работы с EEPROM, ......\examples\Misc\Eeprom\ :
Код:
|
unsigned short __eeprom x0 = 0; /* zero intialized at download time */
unsigned short __eeprom x1 = 42; /* initialized to 42 at download time */ |
похоже сделали также как и для AVR. Не проверял.
|
|
|
|
18.03.2014, 14:10
|
#1163
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от oleg110592
|
в последнем ИАРе есть пример работы с EEPROM, ......\examples\Misc\Eeprom\ :
Код:
|
unsigned short __eeprom x0 = 0; /* zero intialized at download time */
unsigned short __eeprom x1 = 42; /* initialized to 42 at download time */ |
похоже сделали также как и для AVR. Не проверял.
|
Проверьте. Поделитесь результатом. Народ поблагодарит.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
18.03.2014, 14:42
|
#1164
|
Вид на жительство
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
|
Re: FAQ по STM8
Ну, мой, видимо, не последний. Потому что, во-первых, __eeprom только __no_init, во-вторых, __no_init не инициализируется. В-третьих, при попытке записать что-то __eeprom-переменную линкер ругается на отсутствие некоторых функций. В-четвертых, не будет ли short __eeprom x1 = 42; инициализировать переменную при каждом запуске?
В общем, после изучения доступного мне интернета решил делать так:
1. Пишется набор функций для работы с eeprom.
2. Пишется специальная программа, которая только и делает, что инициализирует переменные в eeprom.
3. После запуска на выполнение содержимое eeprom сливается в отдельный файл.
4. В целевой программе этот файл подгружается на этапе отладки.
Это очень криво, но ничего лучше не нашел.
|
|
|
|
18.03.2014, 14:49
|
#1165
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от ut1wpr
|
Проверьте. Поделитесь результатом
|
Проверил пример, микроконтроллер STM8S003 - работает
|
|
|
|
18.03.2014, 19:39
|
#1166
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от oleg110592
|
Проверил пример, микроконтроллер STM8S003 - работает
|
Адресное пространство для EEPROM начинается с 0x4000.
В чем производилась проверка? Сим или Дебаг?
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
18.03.2014, 19:47
|
#1167
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от dimchik_b
|
Ну, мой, видимо, не последний. Потому что, во-первых, __eeprom только __no_init, во-вторых, __no_init не инициализируется. В-третьих, при попытке записать что-то __eeprom-переменную линкер ругается на отсутствие некоторых функций. В-четвертых, не будет ли short __eeprom x1 = 42; инициализировать переменную при каждом запуске?
В общем, после изучения доступного мне интернета решил делать так:
1. Пишется набор функций для работы с eeprom.
2. Пишется специальная программа, которая только и делает, что инициализирует переменные в eeprom.
3. После запуска на выполнение содержимое eeprom сливается в отдельный файл.
4. В целевой программе этот файл подгружается на этапе отладки.
Это очень криво, но ничего лучше не нашел.
|
__no_init и в Африке остается неинициализируемой секцией.
Я делал через Ассемблерную программу (от третьего производителя). ПисАл блок данных с org 0x4000, при необходимости расставлял метки, формировал массивы (таблицы). После ассемблирования получал готовый hex, который зашивал в область еепрома при помощи stvp. В Си программе прописывал фиксированные адреса меток из ассемблерного листинга (sym-table). Тоже немного муторно, но иначе никак. И последняя версия ИАРА тоже не решает проблемы. Скорее всего у STM (IAR здесь немного ни при чем) свое видение назначения еепром-области.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
18.03.2014, 20:43
|
#1168
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Что-то я уже с полчаса туплю, не могу понять, как управлять выходом таймера1 в режиме ШИМ, когда таймер отключен? Итак, я включаю таймер, он генерирует мне ШИМ. Потом я таймер отключаю, а на выходе остается последнее значение (1 или 0, смотря когда выключили). Прямая запись нуля в PC1 не дает никакого результата.
Раньше я этим не заморачивался (т.к. по фронту работал), а сейчас этот таймер динамиком в детской игрушке управляет, т.е. оставлять там 1 не надо (динамик на полевом ключе висит, через резистор и светодиод).
Может, нужно не отключать таймер а переводить его в режим OPM?
P.S. Нет, OPM не помогает. Изменение активного режима (активный 0, а не 1) - тоже.
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 18.03.2014 в 20:47.
Причина: P.S.
|
|
|
|
18.03.2014, 21:04
|
#1169
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от ut1wpr
|
В чем производилась проверка? Сим или Дебаг?
|
Дебаг. Проверил еще ST Visual Programmer - считал EEPROM, странно как то расположено.
|
|
|
|
19.03.2014, 13:33
|
#1170
|
Вид на жительство
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
|
Re: FAQ по STM8
Ничего что-то не могу понять. Пишу функцию для записи в EEPROM. Непонятка первая. Дебаггер говорит, что во FLASH_IAPSR изначально лежит 0х4А, хотя функция, если заставить ее возвращать значение этого регистра, возвращает 0х40, как и положено. Далее, запись во FLASH_DUKR 0xАЕ и 0х56 ничего не меняет: дебаггер по-прежнему говорит, что в FLASH_IAPSR 0х4А, а функция возвращает 0х40. Запись по факту не проходит.
Кстати, кто подскажет, как увидеть дизассемблерный листинг? Соответствующий пункт в меню серый.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:38.
|
|