реклама на сайте
подробности

 
 
> Работа с EEPROM STM8 в IAR, Дописываем библиотеки для работы модификатора __eeprom
VladislavS
сообщение Jul 21 2017, 20:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 аж один день sm.gif Только сегодня STM8L-Discovery получил. Может кто научит?

Прикладываю проект для дискавери (STM8L152C6), может кому пригодится.
Прикрепленный файл  STM8_IAR_EEPROM.rar ( 27.42 килобайт ) Кол-во скачиваний: 68
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Obam
сообщение Aug 2 2017, 07:50
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Кто-нибудь, покажите устройство, реально отслужившее 20 лет (; (напомню, 1997г выпуска)

Везде так: SAM3S1A (щас на столе) - типовое 30 тыс циклов W/E и мин 10 лет хранит; AT91SAM7S256 - 10 тыс циклов W/E и те же 10 лет хранения; для AT90S8535 приглючивается хранение 25 лет.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 2 2017, 09:10
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 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;

задокументируйте его ПРАВИЛЬНО, чтобы всё было отлично!

Go to the top of the page
 
+Quote Post
Эдди
сообщение Aug 2 2017, 09:20
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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 МГц.

Написать, например, в комментариях, откуда эти числа взялись.
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 2 2017, 11:12
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 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)?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 18:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016