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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Работа с EEPROM STM8 в IAR, Дописываем библиотеки для работы модификатора __eeprom
jcxz
сообщение Aug 2 2017, 10:01
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Obam @ Aug 2 2017, 12:58) *
Там нет FRAM, счётчик обычный, рабоче-крестьянский без блэк-джека. Механический.

Поставленный недавно?? Не думал что их ещё ставят. Может где-о в деревне? rolleyes.gif
У нас в доме ещё несколько лет назад все счётчики заменили на электронные. Централизованно.
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 2 2017, 10:03
Сообщение #32


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

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



Цитата(Obam @ Aug 2 2017, 14:17) *
В '11 был заменён эл.счётчик '74-го, ни в нём, ни в новом никакой "флэши" нет. Аргумент - не аргумент (;
При чем тут это. ещй раз... был вопрос
" покажите устройство, реально отслужившее 20 лет" - я показал.

не было вопроса "покажите устройство с флеш памятью, реально отслужившее 20 лет"

Вот эл. счетчик.... какогонить года 60-го выпуска... его в сталинские дома поставили и он до сих пор работает. Теперь 21-ый век.... разрабатываем новый, современный эл. счетчик. сунули туда микропроцессор. а он всего на 20 лет. А почему? а потому что там флеш 20 лет..... ((( Просто новые устройства делают, взамен старым. Везде суют МК. Старые устройства работают по 20 лет. и дольше.... Новые устройства, должны быть не хуже старых.

Go to the top of the page
 
+Quote Post
Obam
сообщение Aug 2 2017, 10:47
Сообщение #33


Знающий
****

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



Цитата(juvf @ Aug 2 2017, 14:03) *
При чем тут это. ещй раз... был вопрос
" покажите устройство, реально отслужившее 20 лет" - я показал.

не было вопроса "покажите устройство с флеш памятью, реально отслужившее 20 лет"

Вот эл. счетчик.... какогонить года 60-го выпуска... его в сталинские дома поставили и он до сих пор работает. Теперь 21-ый век.... разрабатываем новый, современный эл. счетчик. сунули туда микропроцессор. а он всего на 20 лет. А почему? а потому что там флеш 20 лет..... ((( Просто новые устройства делают, взамен старым. Везде суют МК. Старые устройства работают по 20 лет. и дольше.... Новые устройства, должны быть не хуже старых.

Ну ёлы-палы, ну "флэш" же обсуждали и её "срок" годности. Технологии и 30-ти лет нету (Атмел же первыми сделали контроллер с "флэшом" в '94 - я не путаю?).


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


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

Группа: Свой
Сообщений: 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
jcxz
сообщение Aug 2 2017, 13:08
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(juvf @ Aug 2 2017, 14:12) *
Потому что ваш "приличный" код всё же больше помойного. Опять же, интересно посмотреть на реализацию RATE_DIV(19200)?

В помойном нет выбора скорости, в моём есть - поэтому и больше. Если без выбора скорости - то ровно столько же.
RATE_DIV - это просто макрос:
Код
#define RATE_DIV_TRA(div) {div & 15 | div >> 8 & 0xF0, div >> 4 & 255}
#define RATE_DIV_TST(div) \
  RATE_DIV_TRA(assert_static(div >= 16 && div < 65536) * div)
#define RATE_DIV(rate) RATE_DIV_TST(SYSCLK_MH * 2 / (rate) + 1 >> 1)

где: SYSCLK_MH - тактовая частота МК.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Aug 2 2017, 16:08
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(juvf @ Aug 2 2017, 14:12) *
При этом вы явно не хотите скопипастить в студию свой снипер инита, ссылаясь на гит ( и при этом даже не соизволите дать ссылку на гит).

Для особо слепых: ссылка у меня в подписи.
Вот, например:
Код
    // Configure UART
    // 9 bit, no parity, 1 stop (UART_CR3 = 0 - reset value)
    // 57600 on 16MHz: BRR1=0x11, BRR2=0x06
    UART2_BRR1 = 0x11; UART2_BRR2 = 0x06;
    UART2_CR1  = UART_CR1_M; // M = 1 -- 9bits
UART2_CR2 = UART_CR2_REN | UART_CR2_RIEN; // Allow RX, generate ints on rx


Сообщение отредактировал Эдди - Aug 2 2017, 16:10
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 2 2017, 17:08
Сообщение #37


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

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



Цитата(Эдди @ Aug 2 2017, 21:08) *
Код
    UART2_BRR1 = 0x11; UART2_BRR2 = 0x06;

Это и есть снипер? Так я такой код и заюзал, чтоб сэкономить флешь. По мнению некоторых - это помойный код. ))) Это во первых, во вторых - что такое выстрел в ногу? Это например когда руками посчитал что-то и и в расчетах ошибся. Допусим нужны 0х11 и 0х6 в регистрах брр1 и брр2, а вы ошиблись и насчитали 4 и 8. Пишете свой "не уродливый", понятный код.... аля..
Код
// Configure UART
    // 9 bit, no parity, 1 stop (UART_CR3 = 0 - reset value)
    // 57600 on 16MHz: BRR1=0x4, BRR2=0x08
    UART2_BRR1 = 0x04; UART2_BRR2 = 0x08;
    UART2_CR1  = UART_CR1_M; // M = 1 -- 9bits
UART2_CR2 = UART_CR2_REN | UART_CR2_RIEN; // Allow RX, generate ints on rx

Вот вам и выстрел себе в ногу. И ни какая хорошая документация кода вас от выстрела не спасет. А с спл сложнее ошибиться.

И в третих.... я не знаю, что за камень вы используете, но в stm8s такой код не взлетит.... судя по инклуде в вашем коде, это какойто stm8l*, открыл на вскидку RM0031 для stm8l051, стр 532
Цитата
The Baud Counters will be updated with the new value of the Baud Registers after a write to BRR1. Hence the Baud Register value should not be changed during a transaction. The
BRR2 should be programmed before BRR1
Вот он вам, чистой воды самострел, без всяких спл. ))))

Цитата
один раз потратил 2 часа на даташит — написал сниппет для USART..... А даташит с RM — их в любом случае подробно читать придется.....
ну ну.... я вижу как вы их подробно читаете. wink.gif
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 2 2017, 18:04
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



А я бы как-то так написал:
Код
#define F_CPU 16000000.0
#define BaudRate 57600.0
#define Divider ((uint16_t)(F_CPU/BaudRate + 0.5))
  
  USART1_BRR2 = (Divider&0x0F) | ((Divider>>8)&0xF0);
  USART1_BRR1 = (Divider>>4);

Если надо много скоростей, то много делителей бы просчитал на этапе компиляции.

А как сделано в SPL это "сон разума"
Мало того что 32-битные деления в рантайме, так ещё и резельтат без округления к ближайшем целому будет.
Код
/* Clear the LSB mantissa of USARTDIV */
  USARTx->BRR1 &= (uint8_t)(~USART_BRR1_DIVM);
  /* Clear the MSB mantissa of USARTDIV */
  USARTx->BRR2 &= (uint8_t)(~USART_BRR2_DIVM);
  /* Clear the Fraction bits of USARTDIV */
  USARTx->BRR2 &= (uint8_t)(~USART_BRR2_DIVF);
  BaudRate_Mantissa  = (uint32_t)(CLK_GetClockFreq() / BaudRate );
  /* Set the fraction of USARTDIV */
  USARTx->BRR2 = (uint8_t)((BaudRate_Mantissa >> (uint8_t)8) & (uint8_t)0xF0);
  /* Set the MSB mantissa of USARTDIV */
  USARTx->BRR2 |= (uint8_t)(BaudRate_Mantissa & (uint8_t)0x0F);
  /* Set the LSB mantissa of USARTDIV */
  USARTx->BRR1 = (uint8_t)(BaudRate_Mantissa >> (uint8_t)4);


Мой код 0x11 и 0x06 запишет, а индусский скорее всего 0x11 и 0x05. Проверять лень, на глаз вроде так.
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 2 2017, 18:53
Сообщение #39


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

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



Цитата(VladislavS @ Aug 2 2017, 23:04) *
А я бы как-то так написал:
кошерный код.... и даже float.o не подтянулся. Спасибо
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 2 2017, 21:04
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(juvf @ Aug 2 2017, 21:53) *
кошерный код.... и даже float.o не подтянулся. Спасибо

Мой лучше cool.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение Aug 2 2017, 22:40
Сообщение #41


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(juvf @ Aug 2 2017, 20:08) *
И в третих.... я не знаю, что за камень вы используете, но в stm8s такой код не взлетит....

Очень даже взлетит. Работает на STM8S003, S103 и S105. Не работало бы — полез бы глубже читать мануал.
А название инклюда у меня так исторически сложилось — рыбу утянул с L-серии, потом туда потихоньку дописывал нужные дефайны.
Понятно, почему это работало: 6 как-то не сильно много для LSB, а MSB пустой. Иначе не взлетело бы. Надо будет сниппеты в соответствие с RM привести, а то копирую этот кусок из одного в другое место, без учета требований последовательности записи регистров...

В любом случае мой подход правильней SPL. А еще правильней у VladislavS.

Сообщение отредактировал Эдди - Aug 2 2017, 22:48
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 3 2017, 09:56
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Для того чтобы изменить скорость USART надо записать две правильных константы в два регистра в правильной последовательности. Как вы это сделаете - смесь вкусовщины с бесовщиной. Я стараюсь делать чтобы код максимально близко был похож на описание в документации. Так проще потом что-то менять и косяки отлавливать.
Go to the top of the page
 
+Quote Post
juvf
сообщение Aug 3 2017, 15:35
Сообщение #43


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

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



Цитата(VladislavS @ Jul 22 2017, 01:54) *
А дальше как обычно определяем неинициализированные и инициализированные переменные с модификатором __eeprom и компилятор сам всё сделает.
а как uint16_t в епром разместить/писать?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 3 2017, 16:48
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(juvf @ Aug 3 2017, 18:35) *
а как uint16_t в епром разместить/писать?


Весь смысл IAR-вских библиотек - сделать работу с EEPROM прозрачной. Не важно какого типа переменная, модификатор __eeprom размещает её в EEPROM и дальше забота компилятора куда её размещать, как читать и писать.
Код
__eeprom uint16_t x;
x=0x1234;


Go to the top of the page
 
+Quote Post
pittyalex
сообщение Nov 14 2017, 21:22
Сообщение #45





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



Господа, товарищи, здравствуйте.
Помогите разобраться можно (и нужно) с отсылкой к даташитам или мануалам, но желательно конкретное место.
Проблема: пытаюсь сравнить массив в памяти с таким же массивом в еепром (по сути адресное пространство одинаковое) с помощью библиотечной процедуры memcmp, но компилятор ругается:

Error[Pe167]: argument of type "unsigned char __eeprom *" is incompatible with parameter of type "void const *" C:\DISTRIBUTIVES\!Develop\STM\STM8\Projects\S003F3\IAR-Robot\stm8_rc522-master\main.c 81

Объявление массивов:
__near unsigned char mf_key_list[4][10] = { {0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};

__eeprom unsigned char ee_key_list[4][10] = { {0x04, 0x44, 0x2C, 0x12, 0x05, 0x33, 0x82,0,0,0}, //MasterKey
{0,0,0,0,0,0,0,0,0,0}, //Key for first reader
{0,0,0,0,0,0,0,0,0,0}, //Key for second reader
{0,0,0,0,0,0,0,0,0,0}}; //Key for third reader

Сравнение:
if (memcmp(ee_key_list[0], mf_key_list[i], sizeof(mf_key_list[0]) == 0))
{

};

Подскажите, что я делаю не так?
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 13:33
Рейтинг@Mail.ru


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