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

 
 
> STM3210X_LD_VL, табличная инициализация периферии
_Pasha
сообщение Jan 26 2013, 11:15
Сообщение #1


;
******

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



Привет.
Озадачился сабжем на мелкие армы.
От простого к сложному, сделал такую штуку.
Прикрепленный файл  batch_conf.zip ( 1.52 килобайт ) Кол-во скачиваний: 71

Обновляю здесь, пока есть возможность редактировать.
пример использования
CODE

#include "batch_conf.h"
batch_BEGIN(main_tbl)
batch_OR(&(RCC->CR),RCC_CR_HSEON)
batch_WAIT(&(RCC->CR), RCC_CR_HSERDY)
batch_WRITE(&(RCC->CFGR),RCC_CFGR_PLLMULL_0 |RCC_CFGR_PLLSRC)
batch_OR(&(RCC->CR), RCC_CR_PLLON)
batch_WAIT(&(RCC->CR), RCC_CR_PLLRDY)
batch_OR(&(RCC->CFGR),2)
batch_END;

batch_conf(main_tbl, NULL);



Создается таблица во флеше.
Элемент - структура {uint32_t port, data;} Названия полей многоцелевые, поэтому чисто условные, можно unionom разделить для ясности
В тетраду бит 24-27 поля port встроена команда
Конфигуратор выполняет эти команды

Функция заняла 316 байт в кейле.
фрагмент, соответствующий примеру
CODE
RCC->CR |= RCC_CR_HSEON;
while(!(RCC->CR & RCC_CR_HSERDY));
RCC->CFGR = RCC_CFGR_PLLMULL_0 |RCC_CFGR_PLLSRC ;
RCC->CR |= RCC_CR_PLLON;
while(!(RCC->CR & RCC_CR_PLLRDY));
RCC->CFGR |= 2;


Разницы на коротких кусках практически нет. Т.е. смысл только в тотальном использовании такого метода с исключением вычислений этапа выполнения. Утоптать конфигуратор, конечно, можно.
А также к байт-коду перейти.

Сообщение отредактировал _Pasha - Jan 26 2013, 16:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jan 26 2013, 15:32
Сообщение #2


Гуру
******

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



sad.gif чет я все равно не понимаю...

это для систем в которых меняется прошивка на лету что ли?

такое чувство что все знаю что-то что мне не известноsm.gif.... и очевидно.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 26 2013, 17:12
Сообщение #3


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

Группа: Участник
Сообщений: 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
Golikov A.
сообщение Jan 26 2013, 18:25
Сообщение #4


Гуру
******

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


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

Группа: Свой
Сообщений: 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
Golikov A.
сообщение Jan 26 2013, 19:26
Сообщение #6


Гуру
******

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


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

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


Гуру
******

Группа: Свой
Сообщений: 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   STM3210X_LD_VL   Jan 26 2013, 11:15
- - Tahoe   Цитата(_Pasha @ Jan 26 2013, 15:15) Созда...   Jan 26 2013, 12:51
|- - _Pasha   Цитата(Tahoe @ Jan 26 2013, 16:51) 1. Нас...   Jan 26 2013, 13:32
|- - scifi   Цитата(Tahoe @ Jan 26 2013, 16:51) ...   Jan 26 2013, 17:27
- - HHIMERA   Цитата(_Pasha @ Jan 26 2013, 15:15) От пр...   Jan 26 2013, 13:03
- - ReAl   Подобным образом (парами адрес-данные в собираемой...   Jan 26 2013, 14:01
|- - _Pasha   Цитата(ReAl @ Jan 26 2013, 18:01) (чего н...   Jan 26 2013, 14:12
|- - ReAl   Цитата(_Pasha @ Jan 26 2013, 16:12) А ест...   Jan 26 2013, 14:20
|- - _Pasha   Цитата(ReAl @ Jan 26 2013, 18:20) Зато им...   Jan 26 2013, 14:45
|- - AHTOXA   Цитата(_Pasha @ Jan 26 2013, 20:45) За чт...   Jan 26 2013, 14:53
|- - _Pasha   Цитата(AHTOXA @ Jan 26 2013, 17:53) То ес...   Jan 26 2013, 16:11
- - Golikov A.   Народ а можно в 2 словах в чем бизнес то? За что б...   Jan 26 2013, 14:13
|- - _Pasha   Цитата(Golikov A. @ Jan 26 2013, 18:13) Н...   Jan 26 2013, 14:17
- - Golikov A.   что то я видать отстал от технологий... я вообще ...   Jan 26 2013, 14:35
- - Golikov A.   не я правда что-то не втыкаю почему batch_OR(...   Jan 26 2013, 14:58
- - _Pasha   Цитата(AHTOXA @ Jan 26 2013, 18:53) +1:) ...   Jan 26 2013, 15:26
||- - HHIMERA   Цитата(AHTOXA @ Jan 26 2013, 21:52) Плюс ...   Jan 26 2013, 19:07
||- - ReAl   Цитата(Golikov A. @ Jan 26 2013, 22:14) а...   Jan 26 2013, 20:37
||- - Golikov A.   Цитата(ReAl @ Jan 27 2013, 00:37) А у CM0...   Jan 26 2013, 20:41
||- - AHTOXA   Цитата(ReAl @ Jan 27 2013, 02:37) И ещё к...   Jan 26 2013, 20:43
||- - _Pasha   Цитата(ReAl @ Jan 27 2013, 00:37) Надо ум...   Jan 26 2013, 20:45
|- - _Pasha   Цитата(Golikov A. @ Jan 26 2013, 22:25) Т...   Jan 26 2013, 20:16
- - AHTOXA   Цитата(Golikov A. @ Jan 27 2013, 02:14) а...   Jan 26 2013, 20:23
|- - _Pasha   Цитата(AHTOXA @ Jan 27 2013, 00:23) Ну во...   Jan 26 2013, 20:41
- - Golikov A.   кажется начинаю понимать... а сколько операций ух...   Jan 26 2013, 20:38
- - Golikov A.   Хоть плачь... стандартный вариант в регистр запи...   Jan 26 2013, 20:55
|- - AHTOXA   Цитата(Golikov A. @ Jan 27 2013, 02:55) ч...   Jan 26 2013, 20:58
- - Golikov A.   код команды грузить же все равно надо? данные груз...   Jan 26 2013, 21:04
|- - _Pasha   Цитата(Golikov A. @ Jan 27 2013, 00:04) к...   Jan 26 2013, 21:12
- - Golikov A.   Можете расписать что происходит при записи допусти...   Jan 26 2013, 21:15
|- - _Pasha   Цитата(Golikov A. @ Jan 27 2013, 00:15) М...   Jan 26 2013, 21:18
- - Golikov A.   ну да естественно как виртуальная машина обрабатыв...   Jan 26 2013, 21:23
- - _Pasha   Выбрали запись. Декодировали команду >>24 ...   Jan 26 2013, 21:35
- - Golikov A.   ну все я понял в чем маза. это короче разница та...   Jan 26 2013, 21:44
|- - _Pasha   Цитата(Golikov A. @ Jan 27 2013, 01:44) С...   Jan 26 2013, 21:59
- - Golikov A.   Один раз вспоминается был проект где надо было сил...   Jan 26 2013, 22:08
|- - _Pasha   Цитата(Golikov A. @ Jan 27 2013, 02:08) Ф...   Jan 26 2013, 22:57
- - Golikov A.   если упростить архиватор, и скармливать ему линейн...   Jan 26 2013, 23:42
|- - _Pasha   Цитата(Golikov A. @ Jan 27 2013, 03:42) е...   Jan 27 2013, 00:50
|- - HHIMERA   Цитата(_Pasha @ Jan 27 2013, 04:50) В раб...   Jan 27 2013, 09:10
- - AlexandrY   Цитата(_Pasha @ Jan 26 2013, 13:15) От пр...   Jan 27 2013, 09:46
- - _Pasha   Цитата(HHIMERA @ Jan 27 2013, 13:10) Лучш...   Jan 27 2013, 09:55
- - khach   Обычно в одном куске кода работаем с одной перифер...   Jan 27 2013, 10:05


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:58
Рейтинг@Mail.ru


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