Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Читать STшные мануалы, это как погружаться на дно самого глубокого болота. Пока нарисовал так для стандартного режима.

Код: Выделить всё

// i2c
  I2C_FREQR = 2; // Tclk = 500ns
  I2C_CCRH = 10 >> 8; // 5us / 500ns = 10
  I2C_CCRL = 10;
 
  I2C_TRISER = 2+1; // 1000ns / 500ns
 
  I2C_CR1_bit.NOSTRETCH = 0;
  I2C_CR1_bit.ENGC = 0;
  I2C_CR1_bit.PE = 1; // enable
И буду использовать исключительно как мастер. Попутно не могу врубиться зачем после передачи адреса надо читать SR3?
Then the master waits for a read of the SR1 register followed by a read in the SR3 register (see Figure 21 & Figure 22 Transfer sequencing EV6).
Что в нём такого интересного? Проверить бит TRA ?
микрочиповский мануал был гораздо внятнее.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Как-то вы слишком размашисто пишете. Половина вашего кода не делает никакой осмысленной работы. После включения/сброса все использованные вами регистры в нуле. Нет никакого смысла их обнулять еще раз. Даже если компилятор соптимизирует, это просто лишняя писанина. Ну зачем, спрашивается, было набивать строку "I2C_CCRH = 10 >> 8" ?

Чтение статусных регистров имеет простой смысл: процедура чтения сбрасывает некоторые флаги, которые будучи выставленными блокируют нормальную работы I2C. Даже если состояние флагов вашему алгоритму не интересно, чтобы не возникло неожиданных затыков, вставить пустую операцию чтения будет не лишним.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Да забейте вы на этот убогий I2C... Если не слэйв... его вообще проще программным сделать... и надёжнее...
Как-то понадобилось привязать TIC149 к STM32... так пришлось таймер подвязывать, чтобы ACK сформировать... :facepalm:
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Заниматься ногодрыганьем, когда есть аппаратный модуль? Хотя, да, по сравнению с ПИКовским i2c, под который я писал пол-года назад - тяжел для понимания. Один факт того, что надо что-то прочитать (причем только один раз, похоже) наводит тоску.
Ну зачем, спрашивается, было набивать строку "I2C_CCRH = 10 >> 8" ?
Чтобы знать откуда и почему туда пишется 0.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

I2C - исключение из правил... Он ущербный и убогий везде... даже в ПИках... В младших Пиках его вообще нет... но жили же как-то...
Я всё стараюсь делать хардварно... даже то, что другие не делают... но I2C - нах-нах... не стоит оно того... кроме слэйва, конечно...
Вот такое ИМХО...
"Я не даю готовых решений, я заставляю думать!"(С)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

HHIMERA писал(а):Я всё стараюсь делать хардварно... даже то, что другие не делают... но I2C - нах-нах... не стоит оно того... кроме слэйва, конечно...

Вот здесь показали пример обхода заботливо разложенных стм-овцами грабель. Мож, конечно, есть еще какие, но я не сталкивался. Слейв изкаропки работает.

uldemir писал(а):Чтобы знать откуда и почему туда пишется 0.

Ведь не много смысла писать ноль туда, где и так ноль. Читабельность кода? Она хороша, когда за нее не надо платить ограниченным ресурсом. А вот когда все это начинает забивать и так не большой флеш, то еще подумаешь.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

a5021 писал(а):Ведь не много смысла писать ноль туда, где и так ноль.

Когда чел пытается разобраться в чём-то... то глупо требовать чистоты кода... особенно если это не несёт никаких ошибок... С приходом понимания всё почистится...
Читабельность кода? Она хороша, когда за нее не надо платить ограниченным ресурсом. А вот когда все это начинает забивать и так не большой флеш, то еще подумаешь.

Да... а не плюнуть ли и не перейти ли сразу на STM32??? :)))
Заниматься преждевремменой оптимизацией грешно и не кошерно... Унылость реализации от ИАРа вносит не меньший вклад расхода флэша... достаточно заглянуть в дизасм... но лучшего пока нет...
У меня есть исходник... где цепочку NOP'ов категорически трогать нельзя... Костыль однозначный... но на удивление... опровергает многое написанное про STM8... 8)
Кстати... глядя на ту простыню... по "улучшению STM8 I2C"... засомневаешься поневоле в минимальности кода...
"Я не даю готовых решений, я заставляю думать!"(С)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

HHIMERA писал(а):Да... а не плюнуть ли и не перейти ли сразу на STM32??? :)))

Если бы речь шла обо мне, то я бы может и плюнул, но кропаю сейчас одну "забаву" в пятивольтовом окружении, что вживление туда STM32 потянет за собой не оправданные накладные расходы. Была б у атмеги периферия попродвинутее, то можно было бы хоть на атмегу посмотреть, а так, только STM8S и без вариантов.

Кстати... глядя на ту простыню... по "улучшению STM8 I2C"... засомневаешься поневоле в минимальности кода...

Так я ее и не в качестве иллюстрации по изящному стилю в программировании приводил.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Этот вопрос уже пережёвывался, но еще раз спрошу: как читать/писать в EEPROM в stm8L101k3. Снимать защиту записи я научился, кажется (во всяком случае бит DUL устанавливается). Теперь как указать, что переменная находится именно в EEPROM? если объявляю

Код: Выделить всё

__eeprom char leadingzero;
- всё компилируется, но не линкуется. Здесь был какой-то рецепт для космика (что-то про "в опциях проекта на вкладке linker в ячейку Objects прописать либу libl0.sm8"), но не могу такого найти в IAR. Можно было бы просто написать char leadingzero @0x9fff; Но как знать, что компилятор туда что-нибудь не засунет?

p.s. Конструкция __no_init __eeprom char leadingzero @ 0x9FFC; - компилируется. И переменная даже читается. Но не пишется. Стоит только в код добавить присвоение, как линкер выдаёт:

Код: Выделить всё

Error[Li005]: no definition for "__eeprom_program_byte" [referenced from eeprom_util.o(dlstm8smn.a)] 
Error[Li005]: no definition for "__eeprom_wait_for_last_operation" [referenced from eeprom_util.o(dlstm8smn.a)]

Не понятно, что оно от меня хочет, чтобы я присоединил что-то или написал ему эти функции?

p.p.s. Гугл нашел такую фразу:
User guide corrections

IAR C/C++ Development Guide, DSTM-2

• EEPROM, page 27
Additional information:
To make the automatic writes to eeprom variables work, the user must implement the three functions declared at the top of the file stm8/src/lib/eeprom_util.c.
Так значит, я должен?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Программирование STM8

Сообщение dosikus »

uldemir писал(а):Теперь как указать, что переменная находится именно в EEPROM?


Приучить себя читать мануал на пользуемый софт ...

Код: Выделить всё

@eeprom unsigned char evar;      // Variable located in EEPROM
@eeprom unsigned char *eptr;      // Pointer is located in RAM, but points to EEPROM.
unsigned char * @eeprom eptr3;       // Pointer is located in EEPROM, but points to RAM.
@eeprom unsigned char *@eeprom eptr2;   // Pointer is located in EEPROM and points to EEPROM

http://www.cosmic-software.com/faq/faq13.php
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Вы наверное, специально мне грубите. Советую ВАМ потрудиться научиться читать сообщения на которые вы отвечаете. Там написано IAR.

Дальнейшее гуглнье показало, что должна быть функция FLASH_ProgramByte. Но ни в одном хедере такая функция не упоминается.

Можете ткнуть меня носом В. Только напомню, я мучаюсь под IARом.

p.s. Заборол. Остаюсь при своём мнении, что пики логичнее внутри чем стм-ы. Если пользоваться stdperflib-ом, то проблем нет, а если нет, то эти функции, действительно, надо писать самому. Хотя нахрена? если для одного байта реально просто происходит запись в ячейку. А статус записи можно и так посмотреть? изврат какой-то: потрахаться, чтобы удовлетворить компилятор.
Последний раз редактировалось uldemir Сб дек 27, 2014 16:08:09, всего редактировалось 1 раз.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Учитывая ваше отвратительное настроение...
Читайте... просвещайтесь...
http://kazus.ru/forums/showthread.php?s ... 04&page=37
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Остаюсь при своём мнении, что пики логичнее внутри чем стм-ы. Если пользоваться stdperflib-ом, то проблем нет, а если нет, то эти функции, действительно, надо писать самому. Хотя нахрена? если для одного байта реально просто происходит запись в ячейку. А статус записи можно и так посмотреть? изврат какой-то: потрахаться, чтобы удовлетворить компилятор.

Присутствие логики в ПИКах при её отсутствии??? Там же по периферии убожество и забвение!!! Как и у АВР... :)))
Это всё от незнания... Никто не заставляет юзать либы... хедеры компилерописателей и страшное __eeprom... Но для начального старта и понимания происхлдяшего вполне подойдёт...
И да... ИАР чудесатый... выдохся видать за годы существования... удивляет постоянно...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Млин, перестало работать. Не понимаю, что этому чуду надо для записи. Если пускать под отладчиком - идёт. Отпускаешь просто на выполнение - нет. Может еще где-то указывается защита от записи?
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Где-то не выдерживаются тайминги... другого там нет...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Какие тайминги? для записи надо просто записать байт по адресу! дальше сделает офигенно мудрый кристалл. Это глупым пикам, надо было обязательно пнуть ногой, чтобы начался процесс записи. После чего через несколько миллисекунд должен выскочить флаг EOP и готово. Перед записью бит DUL встаёт. По даташиту это единственный ограничивающий фактор.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Нашел еще одну штуку. А где прописывается OPT3?

Кажется это и было проблемой. Но чёрт. В Reference мануале об этом не было ни слова. Было только в даташите на кристалл.
Времянки... времянки.

А как это прописать в исходнике? Или это как в AVR :"А фьзы правильно зашил?"
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Возьмите ST Visual Programmer, там эти опты и расписаны для всех камней. Да, в каком-то смысле это похоже на атмеговские фьюзы.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Каким боком тут OPT??? Если в конфигурации что-то неправильно... оно не будет рулить ни пошагово, ни бегом!!!
Не поедет телега... если коней не запрячь!!!
А вот если пошагово проходит... значит не выдерживаются тайминги... которые могут быть в виде проверки флага... или тривиальной задержки... теже НОПы...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

a5021 писал(а):Возьмите ST Visual Programmer, там эти опты и расписаны для всех камней. Да, в каком-то смысле это похоже на атмеговские фьюзы.
А что мне это даст? Как посмотреть и модифицировать этот option byte нашел и для IAR. Но вопрос как это прописать?
Может достаточно объявить переменную там и компилятор сам сделает? - явно нет. у меня объявлено а в OPT3 был 0.
Может написать какую-то прагму?
Может написать константу 1 по адресу 0x4803?
Может это делать при запуске изнутри программы? - Нельзя. Из программы только можно прочитать.
Или каждый раз лезть ST-LINK -> Option Bytes... и там ручками галочки выставлять?

p.s.

Код: Выделить всё

#pragma location = 0x4803     // OPT3 byte - define DATASIZE
__eeprom unsigned char DATASIZE = 0x01
- не работает. Ошибок нет, но в map-файле никакого упоминания. Ну и после загрузки никаких изменений.

Как вообще с этим быть? ведь для stm8s там прописывается альтернативные функции выводов. Неужели будет такая же морока как с АВРовскими фьюзами? У пиков есть CONFIG через который в проекте фьюзы прописываются.

p.p.s. Нашел горбатый костыль. Сохранить настройки из ST-LINK -> Option Bytes... в *.obc файл и добавить в Опциях Debug -> ST_LINK -> Use option bytes configuration file. Но если я буду применять другой программатор, то эти настройки туда не перейдут. Это просто праздник.
Ответить

Вернуться в «Разные вопросы по МК»