06.06.2012, 09:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Easyrider83
|
Нашел в продаже плату STM8SVLDISCOVERY. На борту какой-то процик смешной. В качестве отладки - ST Link v2 со SWIM. Будем заказывать. Цена низкая.
|
Я "перепилил" Дискаверю, подпаял переходные разъемчики, и теперь имею отдельно муху (отладочный модуль) и отдельно котлету (Линк). Кстати, этот восьмерочный Линк катит и для S и для L линеек. Линейка А в руки не попадалась.
У меня две Дискавери. L и S. Соорудил несколько платок-переходников для работы на солдерлес макетнице. Не всегда чип модуля устраивает.
8S ValueLine 003, что "на борту" довольно ограничен по функционалу. Впрочем, сами убедитесь.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
09.06.2012, 23:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Осваиваю работу с eeprom (с перерывами на основную работу и всякие отвлекающие моменты) в IAR. Без применения библиотек. В целом вопросов нет, кроме...
Объявляю переменные так:
Код:
|
__no_init unsigned char ee_char_1 @ 0x4000;
__no_init unsigned int ee_int_2 @ 0x4001;
__no_init unsigned int ee_int_1 @ 0x4003; |
С таким же успехом применяю #pragma locate с указанием физического адреса размещения для каждой переменной отдельно. Тогда @addr не нужен.
Подскажите, может можно как-то объявить секцию с указанием стартового адреса, чтобы потом компилятор сам вычислял адреса последовательно размещенных переменных?
Спасибо.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
10.06.2012, 01:08
|
|
Заблокирован
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
|
Re: FAQ по STM8
А это... не оно???
Код:
|
__no_init __eeprom unsigned char ee_char_1;
__no_init __eeprom unsigned int ee_int_2;
__no_init __eeprom unsigned int ee_int_1; |
|
|
|
|
10.06.2012, 07:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от st__1
|
А это... не оно??? ![Рот до ушей](images/smilies/icon_doushei.gif)
Код:
|
__no_init __eeprom unsigned char ee_char_1;
__no_init __eeprom unsigned int ee_int_2;
__no_init __eeprom unsigned int ee_int_1; |
|
Я так пробовал, но вот об это споткнулся, так споткнутым и остался...
Цитата:
|
Building configuration: st8-test - Debug
Updating build tree...
main.c
Linking
Error[Li005]: no definition for "__eeprom_program_byte" [referenced from eeprom_util.o(dlstm8msn.a)]
Error[Li005]: no definition for "__eeprom_wait_for_last_operation" [referenced from eeprom_util.o(dlstm8msn.a)]
Error[Li005]: no definition for "__eeprom_program_long" [referenced from eeprom_util.o(dlstm8msn.a)]
Error while running Linker
Total number of errors: 3
Total number of warnings: 0
|
Внутренний голос подсказывает, что-то не то в "консерватории" (eeprom_util.o), а понять до конца глубину своего падения не могу. Видать маловато высот знаний...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
10.06.2012, 08:39
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
Похоже работу с eeprom stm8 IAR еще не допилил. Как тут написано http://supp.iar.com/Support/?note=32477
Nevertheless support for initialized __eeprom-variables is planned in a future release.
подождем...
|
|
|
|
10.06.2012, 09:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от oleg110592
|
Похоже работу с eeprom stm8 IAR еще не допилил. Как тут написано http://supp.iar.com/Support/?note=32477
Nevertheless support for initialized __eeprom-variables is planned in a future release.
подождем...
|
Вы выхватили фразу из контекста и немного не так перевели:
Цитата:
|
The reason for this is that initialized __eeprom variables would require different initialization routines from normal variables.
We presumed that the EEPROM memory would be used for persistent storage, so there would be no need for automatic initialization.
It is up to the application (or system) to initialize the EEPROM memory.
Nevertheless support for initialized __eeprom-variables is planned in a future release.
|
Они отдают инициализацию EEPROM переменных на откуп аппликации или системе. И пишут, что никогда в будущем не планируют эту самую инициализацию в будущих релизах.
Но меня вопрос инициализации не волновал особо. Я про авторазмещение без необходимости адресных расчетов на калькуляторе... ![Улыбка](images/smilies/icon_smile.gif)
Записать переменные в eeprom перед "вводом в эксплуатацию" умеет STVP. Геморно, но умеет... В конечном итоге, можно и в блоке инитов записывать константы в eeprom...
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 10.06.2012 в 09:31.
|
|
|
|
10.06.2012, 10:23
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
Гугль переводчик:
Причиной этого является то, что инициализируется __ EEPROM переменные потребуются различные процедуры инициализации от нормальных величин.
Мы предполагали, что память EEPROM будет использоваться для хранения данных, так что не было бы никакой необходимости для автоматической инициализации.
Это зависит от приложения (или система) для инициализации памяти EEPROM.
Тем не менее поддержка инициализируется __ EEPROM переменных планируется в будущих релизах.
Для AVR же сделано (там вроде писать/читать еепром посложнее), имхо и для STM8 сделают.
Для AVR делаю так:
__eeprom unsigned char Time_zadE = 20;
unsigned char Time_zad;
в программе:
Time_zad=Time_zadE;
Time_zadE=Time_zad;
в листинге вызываются EXTERN __eeget8_8, EXTERN __eeput8_8
Первая строка в stm8 сразу должна работать, а вторая не сложнее чем в avr - не вижу причин не сделать такое иару для стм8
|
|
|
|
10.06.2012, 10:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от oleg110592
|
Гугль переводчик:........
Тем не менее поддержка инициализируется __ EEPROM переменных планируется в будущих релизах.
|
Типичный пример поверхностного прочтения мною текста. Вы правы. Обещают сделать.
Цитата:
|
Для AVR делаю так:
Код:
|
__eeprom unsigned char Time_zadE = 20;
unsigned char Time_zad; |
в программе:
Код:
|
Time_zad=Time_zadE;
Time_zadE=Time_zad; |
в листинге вызываются EXTERN __eeget8_8, EXTERN __eeput8_8
|
Ну я же ведь не про AVR спросил. Зачем мне это? Это я знаю... ![Обижен](images/smilies/icon_beee.gif) Вы в STM8 IAR пробовали объявить:
Код:
|
__eeprom __no_init unsigned char ee_char_1;
__eeprom __no_init unsigned int ee_int_2;
__eeprom __no_init unsigned int ee_int_1; |
Компилирует без ошибок? Ведь текст самих определений возражений у него не вызывает. Посмотрите на приведенные мной сообщения "ругани" линкера.
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 10.06.2012 в 10:52.
|
|
|
|
10.06.2012, 11:24
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
про авр это я так - сделали же.
нашел костыль как сделать:
Код:
|
typedef struct MyPar_t
{
unsigned int Time_zadE;
unsigned int Temper_zadE;
unsigned char Temp;
} MyPar_t;
#pragma location=0x4000
__no_init MyPar_t MyPar;
#pragma required=MyPar
Time_zad=MyPar.Time_zadE;
Temper_zad=MyPar.Temper_zadE; |
в листинге:
LDW X, L:0x4000
LDW L:Time_zad, X
...
LDW X, L:0x4002
LDW L:Temper_zad, X
обратную не пробовал операцию - попробуйте может все и будет работать
|
|
|
Сказали "Спасибо" oleg110592
|
|
|
10.06.2012, 12:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от oleg110592
|
обратную не пробовал операцию - попробуйте может все и будет работать
|
Про организацию переменных в структуру я уже вчера думал, хотел немного "сачкануть" - может кто-то знает более прямой путь, без костылей. ![Улыбка](images/smilies/icon_smile.gif)
С применением структуры в принципе работает. Результат компиляции радует. Обращение к переменным без фокусов. Листинг чистый, ассемблерный. ![Улыбка](images/smilies/icon_smile.gif)
Спасибо.
Посмотрим, что народы скажут. Народы - они умные. И опытные.
PS Туплю, однако. Теперь не могу грамотно объявить external, чтобы обеспечить видимость переменных структуры в других модулях. Сбивает с толку привязка к pragma location.
И так кручу и эдак...
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 10.06.2012 в 13:21.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:54.
|
|