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

 
 
> Закольцевать данные, программа на Си
Dubov
сообщение Jun 3 2014, 05:09
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Имеется буфер длины N
имеется подпрограмма, принимающая на вход указатель на блок данных длины N.

Буфер заполняется циклически (по заполнении буфера, новый отсчёт поступает в начало буфера).

с каждым новым вызовом подпрограммы, получаемый указатель увеличивается на единицу.

Как закольцевать адресацию массива?

Например, может получится ситуация когда указатель находится в произвольном месте массива:

| (a) ( b ) (PTR) (...) (N) |

тогда подпрограмма должна "знать", что она оперирует с массивом | (PTR) (...) (N) (a) ( b ) |

Сообщение отредактировал Dubov - Jun 3 2014, 05:10
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Jun 9 2014, 22:27
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
но совать его везде "потому что микроконтроллер" абсолютно ни к чему.

Я не сую везде, и размеры буфера в основном степени двойки.
Конечно зависит от задачи, но программист должен представлять в какие инструкции, хотя бы примерно, будет компилироваться его код и к чему это приведет.
Обработка по маске - это всегда одинаковое постоянное время обработки данного участка кода. Длительность обработки по условию меняется в зависимости от ветки по которой пройдет исполнение.
Go to the top of the page
 
+Quote Post
menzoda
сообщение Jun 10 2014, 01:47
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 13-09-12
Пользователь №: 73 530



Как раз таки я прекрасно представляю, что будет в моем случае (ARM). В случае использования маски получиться одна инструкция AND, в случае использования условия мы получим CMP, IT и MOV, это если у нас Thumb2. Если же у нас ARM набор инструкций, то IT не будет. Выходит для распространенных МК на базе Cortex-M и ARM7 использование условия в худшем случае увеличит время исполнения на два такта, при этом время выполнения в обоих случаях будет постоянным. Так вот, какие бы оптимизации мы не пытались сделать, два такта - это НИЧТО. Они потонут в тактах, требуемых на вызов функции, на работу со стеком, на обращение к переменной в RAM. В конце-концов у нас тут не DSP, где пару тактов может и сделали бы погоду. Более простые МК на базе других архитектур могут сгенерировать на месте условия какой-нибудь условный переход. Да, в этом случае тактов будет больше, но опять же не настолько больше, чтобы на это обращать внимание.

Это называется переоптимизация. Я сам раньше грешил этим, но теперь отношусь к таким вещам попроще. В конце концов, если от увеличения времени исполнения участка кода всего на пару тактов программа перестает работать, или работает не правильно - то это явные архитектурные проблемы, означающие, что вы рассматриваете микробов через молоток. Нужны такты - есть всякие FPGA и DSP.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dubov   Закольцевать данные   Jun 3 2014, 05:09
- - menzoda   Вместе с указателем на данные передавать указатель...   Jun 3 2014, 05:59
|- - Dubov   Цитата(menzoda @ Jun 3 2014, 14:09) Вмест...   Jun 3 2014, 06:38
|- - megajohn   Цитата(Dubov @ Jun 3 2014, 14:48) В идеал...   Jun 3 2014, 06:42
||- - Dubov   Цитата(megajohn @ Jun 3 2014, 14:52) ну д...   Jun 3 2014, 06:47
||- - _pv   Цитата(Dubov @ Jun 3 2014, 17:57) прошу п...   Jun 3 2014, 07:43
||- - megajohn   Цитата(Dubov @ Jun 3 2014, 14:57) прошу п...   Jun 3 2014, 07:50
||- - mdmitry   Цитата(Dubov @ Jun 3 2014, 14:57) прошу п...   Jun 3 2014, 08:29
|- - menzoda   Цитата(Dubov @ Jun 3 2014, 14:48) допусти...   Jun 3 2014, 08:18
- - mempfis_   Цитата(Dubov @ Jun 3 2014, 12:19) Имеется...   Jun 3 2014, 06:02
|- - MaxiMuz   Цитата(mempfis_ @ Jun 3 2014, 13:12) Функ...   Jun 3 2014, 07:30
|- - mempfis_   Цитата(MaxiMuz @ Jun 3 2014, 14:40) Тольк...   Jun 3 2014, 08:13
|- - MaxiMuz   Цитата(mempfis_ @ Jun 3 2014, 15:23) Тогд...   Jun 5 2014, 08:15
|- - megajohn   Цитата(MaxiMuz @ Jun 5 2014, 16:25) тот ж...   Jun 5 2014, 08:24
|- - mempfis_   Цитата(megajohn @ Jun 5 2014, 15:34) авта...   Jun 5 2014, 09:34
|- - menzoda   Цитата(mempfis_ @ Jun 5 2014, 17:44) Тогд...   Jun 5 2014, 15:17
- - Voldemari4   Можно сделать указатель типом BYTE. Если размер ма...   Jun 3 2014, 07:43
- - x893   а может просто код посмотреть ? 1. http://c.learn...   Jun 5 2014, 09:15
- - alexeyv   ЦитатаДа в них и так нет необходимости. Что все пр...   Jun 9 2014, 01:14
|- - Сергей Борщ   Цитата(alexeyv @ Jun 9 2014, 08:24) Видат...   Jun 9 2014, 02:36
- - Genadi Zawidowski   ЦитатаТак и обрабатывать. В цикле проверять не дош...   Jun 12 2014, 20:37


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

 


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


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