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

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> Работа с EEPROM STM8 в IAR, Дописываем библиотеки для работы модификатора __eeprom
juvf
сообщение Nov 19 2017, 07:47
Сообщение #61


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

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



Цитата(VladislavS @ Nov 18 2017, 22:10) *
Во-первых, зачем на ЯВУ знать адреса переменных? Мне вот обычно фиолетово как они расположены.
В еепром кофигурацию прибора (адрес свой, адрес сервера, всякие периоды, коефициенты и т.п.). Я вычитываю в ПК дамп памяти и в пк разбераю - что есть что, также дамп из пк записываю в мк. Нужно знать, где и что.

Цитата
Во-вторых, есть директивы, привязывающие переменные к фиксированным адресам

#pragma location = 0x100C
не сработала эта деректива с __еепром

Цитата
Сделайте одну структуру для всех переменных в eeprom, в структуре компилятор переставлять поля не станет.
Да, так и придется делать. Спасибо
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 19 2017, 13:27
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pittyalex @ Nov 18 2017, 12:27) *
но как ему это подсказать, я не знаю.

Вернее, возможно ли это в принципе. Скорее всего нет, конечно. Я бы не стал тратить на это время. Если реально поджимает, программирование на ассмблере куда реалистичнее. Всё-таки основное свойство компилятора - выдавать корректный код, и яр для стм8 с этим справляется. Выдавать более оптимальный код - это следующая задача, и руки у них до этого не дошли, очевидно. Кстати, яр для Coldfire может отлично оптимизировать, но при этом иногда выдаёт нерабочикй код (md5, к примеру) laughing.gif
Go to the top of the page
 
+Quote Post
pittyalex
сообщение Nov 19 2017, 17:56
Сообщение #63





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



Цитата(juvf @ Nov 19 2017, 07:47) *
В еепром кофигурацию прибора (адрес свой, адрес сервера, всякие периоды, коефициенты и т.п.). Я вычитываю в ПК дамп памяти и в пк разбераю - что есть что, также дамп из пк записываю в мк. Нужно знать, где и что.


#pragma location = 0x100C
не сработала эта деректива с __еепром

Да, так и придется делать. Спасибо


Попробовал сделать по стандартной схеме:

__eeprom __no_init uint16_t countStarts @0x4030; //0,1
__eeprom __no_init uint16_t period@ 0x4040; //2,3


И всё заработало.
А у вас что за камень, где еепром с адреса 0х1000??? Может поэтму у вас компилятор отказался выполнять такую директиву? Стандартно у СТМ8 адрес 0х1000 попадает в RAM, а еепром начинается с 0х4000, флеш с 0х8000, так что я так и не понял, куда это вы хотели писать... на всех стм8 вроде как область памяти 0х1000 не задействована (ну нет у них 4кБ ОЗУ, или я не помню, может в самых старших моделях).
Go to the top of the page
 
+Quote Post
razrab83
сообщение Nov 20 2017, 04:37
Сообщение #64


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-05-17
Пользователь №: 96 902



У меня @0x4030 - такой "стандартный" способ не работает, не знаю почему

Код
__eeprom __no_init uint16_t countStarts @0x1004;

ошибка компилятора
Цитата
Error[Li005]: no definition for "countStarts" [referenced from C:\Users\stm8\stm8L_sh\Debug\Obj\main.o]


Камень stm8l051. см рис. Без явного указания адреса компилятор сам делает мэп в область 0х1000
Код
"P6-P8":                                   0x19
.eeprom.noinit      uninit   0x001000    0x10  varInEeprom.o [1]
  .eeprom.noinit      uninit   0x001010     0x2  varInEeprom.o [1]


Сообщение отредактировал razrab83 - Nov 20 2017, 04:39
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 20 2017, 06:38
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pittyalex @ Nov 19 2017, 20:56) *
Попробовал сделать по стандартной схеме:

__eeprom __no_init uint16_t countStarts @0x4030; //0,1
__eeprom __no_init uint16_t period@ 0x4040; //2,3

И всё заработало.

Не понимаю я, зачем нужны все эти выкрутасы.
CODE
struct eeprom_layout
{
int i;
float f;
char str[16];
};

struct eeprom_layout volatile* const eeprom = (void volatile*)0x4000;

void f(void)
{
int j = eeprom->i;
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 20 2017, 10:20
Сообщение #66


Гуру
******

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



Цитата(pittyalex @ Nov 18 2017, 11:27) *
Я понимаю, что компилятор не может догадаться, что размер массива меньше байта, поэтому индекс не может (не должен) быть больше размера массива, т.е. байта и нет необходимости выполнять 16 битное умножение, но как ему это подсказать, я не знаю.

А какой версией IAR это скомпилено?
Предполагаю что старой (v2.xx) и без оптимизации.
У меня подобный код (с кучей 16-битных операций) генерит старый v2.20 и с выключенной оптимизацией.
Со включенной оптимизацией уже гораздо лучше. А новый IAR (3.с чем-то) генерит гораздо лучше.
Go to the top of the page
 
+Quote Post
juvf
сообщение Nov 20 2017, 11:20
Сообщение #67


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

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



Цитата
struct eeprom_layout volatile* const eeprom = (void volatile*)0x4000;
-это даже не компиляется. ))

Цитата(scifi @ Nov 20 2017, 11:38) *
Не понимаю я, зачем нужны все эти выкрутасы.
за тем, что еппром != озу. ваш код будет работать с переменной в ОЗУ. А 0х4000 (или 0х1000) - это епром.

Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 20 2017, 12:02
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(juvf @ Nov 20 2017, 14:20) *
-это даже не компиляется. ))

Сочувствую. У меня компиляется.

Цитата(juvf @ Nov 20 2017, 14:20) *
за тем, что еппром != озу. ваш код будет работать с переменной в ОЗУ. А 0х4000 (или 0х1000) - это епром.

Снова сочувствую, у меня работает. Прежде чем будет новая порция негатива, уточню, что для записи в EEPROM использую специально для этого сделанные функции. Зачем их прятать за оператором присваивания, снова не пойму.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Nov 21 2017, 04:16
Сообщение #69


Местный
***

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



Цитата(scifi @ Nov 20 2017, 15:02) *
Зачем их прятать за оператором присваивания, снова не пойму.

Затем же за чем придумали языки высокого уровня.
Go to the top of the page
 
+Quote Post
juvf
сообщение Nov 21 2017, 09:16
Сообщение #70


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

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



Цитата(scifi @ Nov 20 2017, 17:02) *
Прежде чем будет новая порция негатива
где вы видите негатив?

Цитата
, уточню, что для записи в EEPROM использую специально для этого сделанные функции. Зачем их прятать за оператором присваивания, снова не пойму.

ах да, сорри, проглядел ваш const.

Речь идет о том, как разместить переменные по заданному адресу в флеше с модификатором __eeprom, вы взамен переменных предлагаете константные переменные . Что к чему?
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 21 2017, 11:19
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(juvf @ Nov 21 2017, 12:16) *
ах да, сорри, проглядел ваш const.

Речь идет о том, как разместить переменные по заданному адресу в флеше с модификатором __eeprom, вы взамен переменных предлагаете константные переменные . Что к чему?

Вы много чего ещё проглядели.
Go to the top of the page
 
+Quote Post
juvf
сообщение Nov 21 2017, 11:21
Сообщение #72


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

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



Цитата(scifi @ Nov 21 2017, 16:19) *
Вы много чего ещё проглядели.

Это вы проглядели о чем речь и не в тему постите
Go to the top of the page
 
+Quote Post
pittyalex
сообщение Nov 22 2017, 21:36
Сообщение #73





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



Цитата(jcxz @ Nov 20 2017, 10:20) *
А какой версией IAR это скомпилено?
Предполагаю что старой (v2.xx) и без оптимизации.
У меня подобный код (с кучей 16-битных операций) генерит старый v2.20 и с выключенной оптимизацией.
Со включенной оптимизацией уже гораздо лучше. А новый IAR (3.с чем-то) генерит гораздо лучше.

С выключенной оптимизацией и самая последняя версия.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 23 2017, 08:48
Сообщение #74


Гуру
******

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



Цитата(pittyalex @ Nov 22 2017, 23:36) *
С выключенной оптимизацией и самая последняя версия.

Хм... Включать не пробовали? laughing.gif
Go to the top of the page
 
+Quote Post
pittyalex
сообщение Nov 23 2017, 19:28
Сообщение #75





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



Цитата(jcxz @ Nov 23 2017, 08:48) *
Хм... Включать не пробовали? laughing.gif

Нет, после включения оптимизации иногда код понять совершенно не возможно, да и не всегда потом, говорят, работает. Пока места хватает и производительности, не вижу смысла включать. В) ХОтя если будет время, надо будет на том же самом месте эксперимент поставить. Спасибо за "наводку".
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 12:19
Рейтинг@Mail.ru


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