|
Работа с EEPROM STM8 в IAR, Дописываем библиотеки для работы модификатора __eeprom |
|
|
|
Jul 21 2017, 20:54
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Привет, любители STM! В последних версиях IAR уже почти нормально с модификатором __eeprom работает. Надо лишь реализовать три функции, которые в библиотеке не реализованы и на которые линкер ругается. CODE int __eeprom_wait_for_last_operation(void) { if(FLASH_IAPSR_bit.WR_PG_DIS) return 0; while(!FLASH_IAPSR_bit.HVOFF); return 1; }
void __eeprom_program_byte(uint8_t __near * dst, uint8_t v) { *dst = v; }
void __eeprom_program_long(uint8_t __near * dst, uint32_t v) { FLASH_CR2_bit.WPRG = 1; *(dst++) = *((uint8_t*)(&v)); *(dst++) = *((uint8_t*)(&v) + 1); *(dst++) = *((uint8_t*)(&v) + 2); *dst = *((uint8_t*)(&v) + 3); } Ну и не забывать разблокировать запись. CODE void EEPROM_Unlock(void) { FLASH_DUKR = FLASH_RASS_KEY2; FLASH_DUKR = FLASH_RASS_KEY1; }
void EEPROM_Lock(void) { FLASH_IAPSR_bit.DUL=0; }
А дальше как обычно определяем неинициализированные и инициализированные переменные с модификатором __eeprom и компилятор сам всё сделает. CODE __no_init __eeprom uint8_t x; #pragma data_alignment=4 __no_init __eeprom uint32_t y; __no_init __eeprom uint8_t z; __eeprom uint8_t test[10]={ 1,2,3,4,5,6,7,8,9,10 };
int main() { EEPROM_Unlock(); x=test[5]; z=x+1; y=0x12345678; EEPROM_Lock(); for(;;); } И даже при отладке IAR сам прошивает инициализированные __eeprom переменные вместе с кодом. Удобно. Следует обратить внимание на следующие вещи: - почему-то компилятор смело при оптимизации выкидывает переменные с модификатором __eeprom. Мне кажется они должны быть по умолчанию volatile как и SFR, но нет. Ну нет, так нет. В приложенном проекте пришлось обтыкать их volatile. - STM8 32-битные переменные шьёт за один присест, но для этого они должны быть выровнены по 4. Приходится компилятору напоминать о выравнивании. - что-то мне с ходу не удалось получить два раздельных HEX с кодом и eeprom, но у меня опыт с STM8 аж один день  Только сегодня STM8L-Discovery получил. Может кто научит? Прикладываю проект для дискавери (STM8L152C6), может кому пригодится.
STM8_IAR_EEPROM.rar ( 27.42 килобайт )
Кол-во скачиваний: 68
|
|
|
|
|
 |
Ответов
|
Aug 2 2017, 09:10
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(Obam @ Aug 2 2017, 12:50)  Кто-нибудь, покажите устройство, реально отслужившее 20 лет (; (напомню, 1997г выпуска) радиостанция, весы, автомобиль, станок, часы, свитч, модем... или например счетчик электроэнергии.... есть счетчики которые уже по 50 лет прослужили и ещё столько же прослужат. Или вы счетчик эл энергии меняете раз в 10-20 лет? ps глянул другие... у атмеги 20 лет, у стм32 30 лет..... не айс..... Цитата(Эдди @ Aug 2 2017, 13:19)  Мало того, что уродливо, так еще вызывается левая функция, когда уарт инициализуется тремя-четырьмя строчками! УРОДЛИВО!!! Это вы называете УРОДЛИВО!? Ту даже коменты в коде не нужны. Весь инит уарта в одну строчку. вызовом одной функции. вам всё равно свою функцию писать... а если в коде в нескольких местах инит уарта? а если динамически менять режим работы?.... тогда позвольте ваш, не уродливый, инит в студию? Цитата Когда понадобится что-то эдакое, а окажется, что в SPL это либо не реализовано когда понадобиться что-то этакое, а в спл этого нет, то вы НИКОГДА с помощью спл не стрельните себе в ногу, ибо потому что там этого нет. Вы что-то эдакое будете реализовавыть сами, без спл.... и вот тут если и будет выстрел, то уж не из кода спл, а из вашего. Цитата Цитата а у остальных как? TI? Atmel? Там теже спл.... теже уродливые структуры. Не надо тут! Почти любой МК можно по-человечески запрограммировать. Вы о чем.... вы обвиняете стм программистов Цитата Похоже, все-таки, хоть инженеры у STM грамотные, программисты — безнадежные идиоты: то SPL родят, то HAL… и "даете им совет " или как вы бы сделали на месте программистов у ST Цитата Нет бы сразу сниппетов "на голых регистрах" побольше написать Так вот в рамках контектста этих высказываний вопрос: А программисты у TI тоже идиоты? А программисты у Atmela тоже идиоты? А программисты у других компаний тоже идиоты? Программисты TI тишут теже грамоздкие спл. Да, я согласен, любой МК можно закодить без спл... коротко и быстро.... но вопрос не об этом.... Цитата А даташит с RM — их в любом случае подробно читать придется. Хоть с библиотеками, хоть без них. Так зачем мучиться, и читать помимо даташита с RM еще и исходники кривых библиотек? Дело в том, что не придется. Понимаете... библа и абдурино скрывает даташит. заглянул в мануал на библу, вызвал UART1_Init() и забыл про уарт. работает как часы. не нужно досконально изучать даташит и РМ. Скорость вхождения в новый МК на порядок быстрее. Как пример абдурино.... многие юзеры сего чуда вообще не знают что такое даташит и РМ. Инит уарта - Serial.begin(19200) - ВСЁ! Уровень вхождения в программирование МК нулевой. А вообще вы тоже даташит скрываете своими снипетами. вы изучаете даташит, пишете снипеты (это ни что иное как та же библа), а потом не заглядывая в даташит пользуетесь своими снипетами. Цитата Если правильно задокументировать, все будет отлично. ээээ.... не понятно.... что тут документировать?... ещё раз... вот код для скорости 19200 при 4 МГц. UART1->BRR2 = 8; UART1->BRR1 = 6; тут легче ошибиться, чем с спл. Тут нужно открыть рм... покурить его... понять как рассчитать регистры... как это всё привязано к клокам... посчитать... и прописать 8 и 6 в нужной последовательности (в обратной не работает). вот допустим вы ошиблись в расчетах, или не правильно поняли даташит и получили 7 и 6 - это и есть выстрел в ногу. вот пример ошибочного кода. UART1->BRR2 = 7; UART1->BRR1 = 6; задокументируйте его ПРАВИЛЬНО, чтобы всё было отлично!
|
|
|
|
|
Aug 2 2017, 09:20
|
Знающий
   
Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250

|
Цитата(juvf @ Aug 2 2017, 12:10)  вам всё равно свою функцию писать... И что? У меня не будет 100500 ассертов и кучи вычислений для такой элементарщины. Три-четыре присвоения — и все! Цитата а если в коде в нескольких местах инит уарта? Больше, чем количество уартов, их все равно быть не может. ctrl+c → ctrl+v решают ☺ Всяко меньше кода на выходе будет. Цитата а если динамически менять режим работы? Кому это может понадобиться? Цитата тогда позвольте ваш, не уродливый, инит в студию? На гитхабе лежит, я ж говорю. Цитата когда понадобиться что-то этакое, а в спл этого нет, то вы НИКОГДА с помощью спл не стрельните себе в ногу, ибо потому что там этого нет. Спасибо, посмеялся. Ну и на кой тогда вы эти спл используете? Цитата А программисты у TI тоже идиоты? А программисты у Atmela тоже идиоты? А программисты у других компаний тоже идиоты? Программисты TI тишут теже грамоздкие спл. Индусу заплатили, он пишет. Какая ему разница, что смысла в этой писанине нет? Цитата библа и абдурино скрывает даташит И поэтому с ними работать еще сложней: нужно не только даташит читать, но и исходники долбаных библиотек/абдурин! Цитата Скорость вхождения в новый МК на порядок быстрее Это хорошо только если задача — помигать светодиодиком, когда СМС придет. И делается эта железяка в одном-единственном экземпляре. Цитата многие юзеры сего чуда вообще не знают что такое даташит и РМ И им наплевать, что для мигания светодиодом код 4кБ занимает! И что SPI/I2C/etc у них тупым ногодрыгом реализуются. И что для простой задачи, где при правильном подходе хватило бы 8кБ флеша за глаза, им требуется минимум 32. И т.д., и т.п. Я вообще ничего хорошего в этом не вижу. Вон, компьютеры тоже когда-то были приличными железяками, для работы на них нужно было быть инженером. А сейчас любая блондинко сидит, мышкой тыкает. В итоге скатились чуть ли не в каменный век! Народ уже вообще не считает, что нужно учиться — компьютер же все сделает! Та же самая мастдайка развилась именно благодаря тезису "каждой кухарке — по компутеру!". Иначе никто бы эту неюзабельную дрянь не покупал! Цитата А вообще вы тоже даташит скрываете своими снипетами. вы изучаете даташит, пишете снипеты (это ни что иное как та же библа), а потом не заглядывая в даташит пользуетесь своими снипетами. По коду моего сниппета все видно, а по коду вызова библиотечной функции — нет. Цитата ээээ.... не понятно.... что тут документировать?... ещё раз... вот код для скорости 19200 при 4 МГц. Написать, например, в комментариях, откуда эти числа взялись.
|
|
|
|
|
Aug 2 2017, 11:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(Эдди @ Aug 2 2017, 14:20)  Кому это может понадобиться? в смысле кому? работала железка на скорости 19200, теперь нужно перестроить на 9600. Полно таких устройств. Цитата Индусу заплатили, он пишет. Какая ему разница, что смысла в этой писанине нет? Ещё раз... при чем тут индус? вы говорите, что программисты у ST - иниоты. Именно у СТ!!! Можно подумать в других компаниях другой подход. Я и спрашиваю, а программисты не СТ? Программисты ТИ и Атмела - так какой подход? тьретий раз спрашиваю - нет ответа на конкретный вопрос, один флуд. Цитата По коду моего сниппета все видно, а по коду вызова библиотечной функции — нет. пока что кода вашего снипета вообще не видно )) а по коду библиотечной функции ВАМ не понятно как настраивается уарт??? Код UART1_Init(19200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); вам не понятно какой битрейт? сколько стоп, паритетность, длинна 8 бит? ВАМ реально не понятно это из этого кода..... тогда смысла с вами дальнейшей дискуссии нет. И всё остальное, что вы пишете, простите, но просто бред. Такой код не понятен либо глупцу, либо это троллинг. При этом вы явно не хотите скопипастить в студию свой снипер инита, ссылаясь на гит ( и при этом даже не соизволите дать ссылку на гит). Цитата(jcxz @ Aug 2 2017, 14:53)  "cppinit.o" - откажитесь от статических инициализированных классов/структур с конструкторами - и не будет его. Уберите из программы все статические объекты инициализированные не нулями - и тоже не будет каких-то секций или будут меньше. Ну уже float убрал.... исчезло float.o. Когда станет не в моготу, уберу с++..... " и ещё ещё ещё ещё чего-нибудь". )) спс за совет. Цитата(jcxz @ Aug 2 2017, 14:53)  Такому коду место на помойке. "Без библиотек" совсем не означает что нужно писать такое. Почему нельзя написать "без библиотек" и при этом вполне прилично? Как-то так: Потому что ваш "приличный" код всё же больше помойного. Опять же, интересно посмотреть на реализацию RATE_DIV(19200)?
|
|
|
|
Сообщений в этой теме
VladislavS Работа с EEPROM STM8 в IAR Jul 21 2017, 20:54 jcxz Цитата(VladislavS @ Jul 21 2017, 23:54) С... Jul 31 2017, 09:22 VladislavS Цитата(jcxz @ Jul 31 2017, 12:22) Выкидыв... Jul 31 2017, 11:01  jcxz Цитата(VladislavS @ Jul 31 2017, 14:01) К... Jul 31 2017, 11:25   VladislavS Цитата(jcxz @ Jul 31 2017, 14:25) Вот это... Jul 31 2017, 12:31    jcxz Цитата(VladislavS @ Jul 31 2017, 15:31) К... Jul 31 2017, 15:10     VladislavS Цитата(jcxz @ Jul 31 2017, 18:10) А если ... Jul 31 2017, 16:34   VladislavS Цитата(jcxz @ Jul 31 2017, 14:25) Тут как... Jul 31 2017, 14:26 juvf 2VladislavS
Цитата(jcxz @ Jul 31 2017, 14... Aug 1 2017, 11:38  jcxz Цитата(juvf @ Aug 1 2017, 14:38) вопрос о... Aug 1 2017, 13:08  VladislavS Цитата(juvf @ Aug 1 2017, 14:38) вопрос о... Aug 1 2017, 14:09   jcxz Цитата(VladislavS @ Aug 1 2017, 17:09) См... Aug 1 2017, 15:23   juvf Цитата(VladislavS @ Aug 1 2017, 19:09) Би... Aug 1 2017, 17:29 DS Прекратите хамить собеседнику. При повторении буде... Aug 1 2017, 16:02 VladislavS Инициализированные переменные с модификатором __ee... Aug 1 2017, 16:11 Эдди Подтверждаю, никаких const писать не надо. Вот так... Aug 1 2017, 16:19 VladislavS Цитата(Эдди @ Aug 1 2017, 19:19) Подтверж... Aug 1 2017, 16:34 Эдди Цитата(VladislavS @ Aug 1 2017, 19:34) а ... Aug 1 2017, 19:00 juvf Цитата(Эдди @ Aug 2 2017, 00:00) Зачем вы... Aug 1 2017, 19:48  VladislavS Цитата(Эдди @ Aug 1 2017, 22:00) А смысл?... Aug 1 2017, 20:38  jcxz Цитата(juvf @ Aug 1 2017, 22:48) Мне не н... Aug 2 2017, 09:53 Эдди Да, под стартапом я имел в виду ассемблерный файл,... Aug 2 2017, 05:30 juvf ЦитатаНу и просто уродливо выглядят все эти инициа... Aug 2 2017, 07:15 Эдди Цитата(juvf @ Aug 2 2017, 10:15) вот напр... Aug 2 2017, 08:19  Obam Цитата(juvf @ Aug 2 2017, 12:28) радиоста... Aug 2 2017, 09:17   juvf Цитата(Obam @ Aug 2 2017, 14:17) В '1... Aug 2 2017, 10:03    Obam Цитата(juvf @ Aug 2 2017, 14:03) При чем ... Aug 2 2017, 10:47    jcxz Цитата(juvf @ Aug 2 2017, 14:12) Потому ч... Aug 2 2017, 13:08    Эдди Цитата(juvf @ Aug 2 2017, 14:12) При этом... Aug 2 2017, 16:08     juvf Цитата(Эдди @ Aug 2 2017, 21:08) Код UART... Aug 2 2017, 17:08      Эдди Цитата(juvf @ Aug 2 2017, 20:08) И в трет... Aug 2 2017, 22:40 Эдди Вот можно подумать, обычные USB-флешки гарантируют... Aug 2 2017, 09:11 Obam Там нет FRAM, счётчик обычный, рабоче-крестьянский... Aug 2 2017, 09:58 jcxz Цитата(Obam @ Aug 2 2017, 12:58) Там нет ... Aug 2 2017, 10:01 VladislavS А я бы как-то так написал:
Код#define F_CPU 160000... Aug 2 2017, 18:04 juvf Цитата(VladislavS @ Aug 2 2017, 23:04) А ... Aug 2 2017, 18:53  jcxz Цитата(juvf @ Aug 2 2017, 21:53) кошерный... Aug 2 2017, 21:04 VladislavS Для того чтобы изменить скорость USART надо записа... Aug 3 2017, 09:56 juvf Цитата(VladislavS @ Jul 22 2017, 01:54) А... Aug 3 2017, 15:35 VladislavS Цитата(juvf @ Aug 3 2017, 18:35) а как ui... Aug 3 2017, 16:48 pittyalex Господа, товарищи, здравствуйте.
Помогите разобрат... Nov 14 2017, 21:22 juvf Цитата(pittyalex @ Nov 15 2017, 02:22) По... Nov 15 2017, 03:48  pittyalex Цитата(juvf @ Nov 15 2017, 04:48) так ком... Nov 16 2017, 12:30   scifi Цитата(pittyalex @ Nov 16 2017, 15:30) Ес... Nov 16 2017, 12:46   juvf Цитата(pittyalex @ Nov 16 2017, 17:30) В ... Nov 16 2017, 13:30 VladislavS На чтение EEPROM в STM8 ничем не отличается от обы... Nov 16 2017, 17:14 pittyalex Господа, огромное спасибо за помощь. Почему сам н... Nov 16 2017, 18:11 scifi Цитата(pittyalex @ Nov 16 2017, 21:11) Во... Nov 16 2017, 19:58  pittyalex Цитата(scifi @ Nov 16 2017, 19:58) Глупос... Nov 16 2017, 20:17   scifi Цитата(pittyalex @ Nov 16 2017, 23:17) Кс... Nov 16 2017, 20:40    pittyalex Цитата(scifi @ Nov 16 2017, 20:40) Лучше ... Nov 18 2017, 09:27     scifi Цитата(pittyalex @ Nov 18 2017, 12:27) но... Nov 19 2017, 13:27     jcxz Цитата(pittyalex @ Nov 18 2017, 11:27) Я ... Nov 20 2017, 10:20      pittyalex Цитата(jcxz @ Nov 20 2017, 10:20) А какой... Nov 22 2017, 21:36       jcxz Цитата(pittyalex @ Nov 22 2017, 23:36) С ... Nov 23 2017, 08:48        pittyalex Цитата(jcxz @ Nov 23 2017, 08:48) Хм... В... Nov 23 2017, 19:28         jcxz Цитата(pittyalex @ Nov 23 2017, 21:28) Не... Nov 23 2017, 23:13         scifi Цитата(pittyalex @ Nov 23 2017, 22:28) Не... Nov 24 2017, 08:03          juvf Цитата(scifi @ Nov 24 2017, 13:03) А заче... Nov 24 2017, 08:26          pittyalex Цитата(scifi @ Nov 24 2017, 08:03) А заче... Nov 24 2017, 20:45           scifi Цитата(pittyalex @ Nov 24 2017, 23:45) А ... Nov 24 2017, 21:03 juvf Цитата(pittyalex @ Nov 16 2017, 23:11) То... Nov 17 2017, 03:00 VladislavS Все эти кастинги работают пока вы указатель для чт... Nov 17 2017, 04:19 juvf был код
Код__eeprom __no_init uint16_t countStart... Nov 18 2017, 13:55 VladislavS Цитата(juvf @ Nov 18 2017, 16:55) получил... Nov 18 2017, 17:10  juvf Цитата(VladislavS @ Nov 18 2017, 22:10) В... Nov 19 2017, 07:47   pittyalex Цитата(juvf @ Nov 19 2017, 07:47) В еепро... Nov 19 2017, 17:56    razrab83 У меня @0x4030 - такой "стандартный" спо... Nov 20 2017, 04:37    scifi Цитата(pittyalex @ Nov 19 2017, 20:56) По... Nov 20 2017, 06:38     juvf Цитатаstruct eeprom_layout volatile* const eeprom ... Nov 20 2017, 11:20      scifi Цитата(juvf @ Nov 20 2017, 14:20) -это да... Nov 20 2017, 12:02       VladislavS Цитата(scifi @ Nov 20 2017, 15:02) Зачем ... Nov 21 2017, 04:16       juvf Цитата(scifi @ Nov 20 2017, 17:02) Прежде... Nov 21 2017, 09:16        scifi Цитата(juvf @ Nov 21 2017, 12:16) ах да, ... Nov 21 2017, 11:19         juvf Цитата(scifi @ Nov 21 2017, 16:19) Вы мно... Nov 21 2017, 11:21 AHTOXA Цитата(juvf @ Nov 18 2017, 18:55) получил... Nov 18 2017, 20:20
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|