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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> STM3210X_LD_VL, табличная инициализация периферии
_Pasha
сообщение Jan 26 2013, 16:11
Сообщение #16


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AHTOXA @ Jan 26 2013, 17:53) *
То есть, например, не получится (?) при сбое инициализации HSE откатиться на HSI.

В продолжение. Таки надо, чтобы batch_conf() был не void, а int
чтобы информацию об откате выдавать на-гора. Добавлю.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 26 2013, 17:12
Сообщение #17


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Golikov A. @ Jan 26 2013, 19:32) *
...такое чувство что все знаю что-то что мне не известноsm.gif.... и очевидно.


просветление это!
пора в индию к ламам sm.gif))
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 26 2013, 17:27
Сообщение #18


Гуру
******

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



Цитата(Tahoe @ Jan 26 2013, 16:51) *
"Не экономь память. Память, это г*вно. Производительность!" (с) Один умный человек, еще лет 10-12 назад сказал мне.

На самом деле это сказал Дональд Кнут, причём несколько иначе: производительность тоже говно, главное - читаемость кода.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 18:25
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(kolobok0 @ Jan 26 2013, 21:12) *
просветление это!
пора в индию к ламам sm.gif))


Так может просветите? Как и зачем автор собирается использовать спец функцию которая ухудшает читабельность? Наверное правильнее сказать записывает другими словами те же действия?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 26 2013, 18:52
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Jan 27 2013, 00:25) *
Так может просветите? Как и зачем автор собирается использовать спец функцию которая ухудшает читабельность?

Автор предлагает заменить запись REG=VALUE;, которая обычно компилируется в нечто типа
Код
movw    r1, low(REG)
movt    r1, high(REG)
movw    r2, low(VALUE)
movt    r2, high(VALUE)
str r2, [r1, #0]
на два слова - адрес регистра и значение. Плюс подпрограмма, получающая массив пар регистр-значение, и записывающая значения по адресам. (Я немного упростил)
При больших объёмах инициализации это должно дать выигрыш по объёму кода. (Это - цель)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jan 26 2013, 19:07
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(AHTOXA @ Jan 26 2013, 21:52) *
Плюс подпрограмма, получающая массив пар регистр-значение, и записывающая значения по адресам. (Я немного упростил)

Мы лицезреем рождение очередной ардуины... 05.gif
Цитата
При больших объёмах инициализации это должно дать выигрыш по объёму кода. (Это - цель)

В Low Density??? И что в остатке???
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 19:26
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(AHTOXA @ Jan 26 2013, 22:52) *
Автор предлагает заменить запись REG=VALUE;, которая обычно компилируется в нечто типа
Код
movw    r1, low(REG)
movt    r1, high(REG)
movw    r2, low(VALUE)
movt    r2, high(VALUE)
str r2, [r1, #0]
на два слова - адрес регистра и значение. Плюс подпрограмма, получающая массив пар регистр-значение, и записывающая значения по адресам. (Я немного упростил)
При больших объёмах инициализации это должно дать выигрыш по объёму кода. (Это - цель)


а ну слава богу значит идею я в целом понял верно. Теперь у меня вопрос, какой процент кода занимает инициализация?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 26 2013, 19:39
Сообщение #23


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Jan 27 2013, 01:26) *
Теперь у меня вопрос, какой процент кода занимает инициализация?

На STM3210X_LD_VL? Очень большой. Периферии куча, а памяти с гулькин нос. Поэтому здесь путь такой - всё, что только возможно, делается аппаратно. Соответственно, инициализация - основная часть программы.
На таких чипах обычно кроме инициализации больше почти ничего и не делаютsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 20:14
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(AHTOXA @ Jan 26 2013, 23:39) *
На STM3210X_LD_VL? Очень большой. Периферии куча, а памяти с гулькин нос. Поэтому здесь путь такой - всё, что только возможно, делается аппаратно. Соответственно, инициализация - основная часть программы.
На таких чипах обычно кроме инициализации больше почти ничего и не делаютsm.gif



а не получиться ли так что передать 2 слова + место занятое этими 2 словами в функцию записи данных в регистр будет больше чем просто записать данные в регистр пятью командами?

поглядел доку на семейство, там самое мелкое значение флешки 64 кБайта, не такая уж у гули маленькая писяsm.gif.... Не если конечно подрубать чужие библиотеки не глядя все улетит сразу, но если ручками, то этого дофига... ИМХО
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2013, 20:16
Сообщение #25


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Golikov A. @ Jan 26 2013, 22:25) *
Так может просветите? Как и зачем автор собирается использовать спец функцию которая ухудшает читабельность? Наверное правильнее сказать записывает другими словами те же действия?

Попутно узрел еще одну перспективу. Дело в том, что если я на птичьем языке буду описывать действия, относящиеся к инициализации, а их немного, будет проще перейти на переменную длину псевдокоманд, поскольку для него нужна тулза, собирающая коллекцию адресов, данных и масок и формирующая их массив, который не будет более 256 элементов, типа словаря в архивном файле. Естественно, завязываться на Си-синтаксис никто не будет. А так - красота. Кстати, COG кто-нить пользует?

Цитата(Golikov A. @ Jan 27 2013, 00:14) *
а не получиться ли так что передать 2 слова + место занятое этими 2 словами в функцию записи данных в регистр будет больше чем просто записать данные в регистр пятью командами?

Сейчас выигрыш небольшой, скачайте посмотрите. Но я только сегодня этим позанимался.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 26 2013, 20:23
Сообщение #26


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Jan 27 2013, 02:14) *
а не получиться ли так что передать 2 слова + место занятое этими 2 словами

Нет, не получится. Потому что передавать надо не два слова, а адрес массива слов.

Цитата(_Pasha @ Jan 27 2013, 02:16) *
будет проще перейти на переменную длину псевдокоманд

А какие проблемы с переменной длиной? Ну вот, навскидку:
0 - команда очистки, 1 параметр(адрес);
1 - команда записи, 2 параметра (адрес, значение);
2 - команда установки битов, 2 параметра (адрес, маска);
...
25 - команда ожидания установки битов, 3 параметра (адрес, маска, тайм-аут);
...
команды - как влезет, думаю, что байта за глаза хватит. Выравнивание вот только полетит, но это ничего, мы ж за плотность боремсяsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 26 2013, 20:37
Сообщение #27


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Golikov A. @ Jan 26 2013, 22:14) *
а не получиться ли так что передать 2 слова + место занятое этими 2 словами в функцию записи данных в регистр будет больше чем просто записать данные в регистр пятью командами?
В функцию эти два слова не передаются сами по себе. Они все записываются в массив структур. Функция берёт массив и выбирате/выполняет.
Приблизительно как
Код
switch(cmd) {
case cm_a: cm_a_func(); break;
case cm_b: cm_b_func(); break;
case cm_c: cm_c_func(); break;
case cm_d: cm_d_func(); break;
}
и
Код
struct {
    uint8_t cmd;
    void (*pfunc)(void);
} cmdtable[] = {
    {cm_a, cm_a_func},
    {cm_b, cm_b_func},
    {cm_c, cm_c_func},
    {cm_d, cm_d_func},
    {0, 0}
};
плюс функция поиска в массиве по полю cmd с вызовом функции по полю pfunc.
На больших таблицах функций выигрыш ощутимый. Либо при большом количестве таких switch() -- функция поиска в таблице-то одна на всех.

В данном случае (при 316 байтах в интерпретаторе) выигрыш в коде при тупой записи в регистры пойдёт где-то после 26..27-ой пары, при операциях типа |= где-то после 20-той, при wait-операциях — после 16-той. Надо уменьшать интерпретатор :-)
Ради такого дела можно и на асме выписать :-)

Цитата(AHTOXA @ Jan 26 2013, 22:23) *
0 - команда очистки, 1 параметр(адрес);
И ещё команда записи 1-ки (вместе с командой записи 0 полезны для bit-band области).
Ну и подэкономить можно на вариации аргумента для записи uint8_t/uint16_t/uint32_t. Только это все интерпретатор утолщает, дольше ждать, когда прибыль пойдёт.

Цитата(AHTOXA @ Jan 26 2013, 22:23) *
Выравнивание вот только полетит, но это ничего, мы ж за плотность боремсяsm.gif
А у CM0 обращение по невыровненному бывает? А то ведь это имеет смысл для мелких кристаллов.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 20:38
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



кажется начинаю понимать...

а сколько операций уходить на запись данных в регистр этой функцией? Что то у меня на запись регистра меньше не выходит, сэкономить можно на загрузке старшей части регистра адреса но....
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2013, 20:41
Сообщение #29


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AHTOXA @ Jan 27 2013, 00:23) *
Ну вот, навскидку:
0 - команда очистки, 1 параметр(адрес);
Выравнивание вот только полетит, но это ничего, мы ж за плотность боремсяsm.gif

Очистка как раз используется раз в 100лет sm.gif
Выравнивание при том, что никуда не спешим, значения не имеет.
Установка битов, кстати, операции |= &= есть, а ^= еще нету, добавлю.
Можно влезть в байт при другой псевдомашине, но уже с регистровой моделью, типа
регистры адреса источника, приёмника, непосредственных данных, таймаута, адреса вспомогательной функции. Но сейчас конфигуратор влезает в 304 или 308 байт, а там - уже хз.
А с внешней тулзой
uint32_t sfr_collection[]={тратата}; и также коллекция масок и прочая. И будут байты при простой машине.

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 20:41
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(ReAl @ Jan 27 2013, 00:37) *
А у CM0 обращение по невыровненному бывает? А то ведь это имеет смысл для мелких кристаллов.


опять перестал понимать%(

выборка из памяти без выравнивания у кортекса 3 только, а во флеше все равно с выравниванием. а У 0 и память и флеш с выравниванием. Может внешнюю флэшку легче подрубить?

Сообщение отредактировал IgorKossak - Jan 27 2013, 09:51
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post

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

 


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


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