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

 
 
> Подскажите по реализации библиотеки для МК?
Harvester
сообщение Aug 25 2015, 08:20
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Имеется плата с МК (STM32, но это не суть важно). Мне необходимо написать библиотеку, которая будет передана разработчикам основной программы в бинарном виде. Одна из функций моей библиотеки должна при вызове брать с частотой 100 кГц некоторое количество отсчетов с выводов МК.
Загвоздка в том, как организовать этот самый интервал между отсчетами. Мне приходят в голову следующие варианты:
1. Задержка в цикле - криво и не серьезно;
2. Задержка с использованием HAL-функций (SysTick);
3. Использование какого-либо аппаратного таймера;
4. Обязать разработчиков основной программы вызывать функцию взятия отсчетов с заданной периодичностью.
Из перечисленных вариантов мне больше нравится 4-й. Может я что-то упустил и есть другие решения?
Спасибо.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Aug 25 2015, 08:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Harvester @ Aug 25 2015, 11:20) *
3. Использование какого-либо аппаратного таймера;
4. Обязать разработчиков основной программы вызывать функцию взятия отсчетов с заданной периодичностью.

Поскольку Вы уже заняли в "библиотеке" какие-то IO и видимо жестко, то так-же занять еще и таймер уже не страшно. А так, если в совсем общем случае, то "4".
Ну а правильный это "5", который назван постом выше.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 25 2015, 08:57
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(zltigo @ Aug 25 2015, 11:24) *
Поскольку Вы уже заняли в "библиотеке" какие-то IO и видимо жестко, то так-же занять еще и таймер уже не страшно.

С одной стороны Вы правы, однако здесь я вижу две проблемы:
1. Никто не может гарантировать, что будет свободный таймер. Конечно, это весьма маловероятно, но все же...
2. Как его конфигурировать? В этом случае разработчики должны предоставить информацию о тактовой частоте. (Да, в CMSIS есть такая переменная, но кто сказал, что они будут использовать CMSIS или не вырежут эту функциональность?) А потом еще читать регистры RCC, высчитывать тактовую таймеров...

Раз уж все равно вводить требования к основной программе, то пусть будет пункт 4 - мне так проще sm.gif

Цитата(adnega @ Aug 25 2015, 11:35) *
Может, достаточно подсказать им как это делается?

Да они знают, просто на высшем уровне было принято такое решение. Может все еще и поменяется sm.gif


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2015, 09:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Harvester @ Aug 25 2015, 11:57) *
С одной стороны Вы правы, однако здесь я вижу две проблемы:
1. Никто не может гарантировать, что будет свободный таймер. Конечно, это весьма маловероятно, но все же...

Но кто-то ведь гарантровал, то будут свободные пины, которые Вы читать собрались, или тоже нет sm.gif
QUOTE
2. Как его конфигурировать?

Так-же, как и все остальное - библиотека по любому имеет функцию инициализации. Вот и потребуйте вызов этой функции с указанием тактовой частоты.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 25 2015, 09:29
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(zltigo @ Aug 25 2015, 12:12) *
Но кто-то ведь гарантровал, то будут свободные пины, которые Вы читать собрались, или тоже нет sm.gif

Они не свободны, а жестко подключены к внешней периферии! Но Вашу мысль я понял. Буду решать.

Возник еще вопрос.
Допустим я задействую таймер. Т.к. я не знаю, какая в основной программе будет система прерываний (приоритеты и пр.), я буду контролировать интервал ожиданием флага переполнения.
Если не принимать во внимание вопросы эстетики, то чем это решение принципиально будет отличаться от программной задержки с помощью цикла?

Сообщение отредактировал Harvester - Aug 25 2015, 10:14


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 25 2015, 11:44
Сообщение #6


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Harvester @ Aug 25 2015, 12:29) *
Допустим я задействую таймер. Т.к. я не знаю, какая в основной программе будет система прерываний (приоритеты и пр.), я буду контролировать интервал ожиданием флага переполнения.
Если не принимать во внимание вопросы эстетики, то чем это решение принципиально будет отличаться от программной задержки с помощью цикла?

Я правильно понял, что эта "библиотека" будет содержать вечный цикл с ожиданием флажка таймера (с последующей обработкой данных) ?
Это принципиально плохое решение.
Хотя бы потому, что остальной, неизвестной части программы тоже нужно процессорное время.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 25 2015, 12:16
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(esaulenka @ Aug 25 2015, 14:44) *
Я правильно понял, что эта "библиотека" будет содержать вечный цикл с ожиданием флажка таймера (с последующей обработкой данных) ?
Это принципиально плохое решение.
Хотя бы потому, что остальной, неизвестной части программы тоже нужно процессорное время.

Не совсем так. При вызове одной конкретной функции нужно взять 100 отсчетов с интервалом в 10 мкс (100 кГц) и обработать их. Т.е. весь вопрос в том, как реализовать, условно говоря, функцию delay_10us(). В любом случае возврат из функции возможен только после взятия всех отсчетов, а раз так, то какая разница как ждать: считать nop-ы или ждать флаг?


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 25 2015, 12:54
Сообщение #8


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Harvester @ Aug 25 2015, 15:16) *
При вызове одной конкретной функции нужно взять 100 отсчетов с интервалом в 10 мкс (100 кГц) и обработать их.
...
В любом случае возврат из функции возможен только после взятия всех отсчетов,

И почему бы это сразу не описать, в первом же сообщении?..

Цитата(Harvester @ Aug 25 2015, 15:16) *
Т.е. весь вопрос в том, как реализовать, условно говоря, функцию delay_10us().

Таймером, на мой взгляд - единственное нормальное решение. Без всяких прерываний, раз уж эту миллисекунду не жалко :-)
Если в контроллере не используется встроенный ЦАП, можно задействовать самые простые таймеры - TIM6/TIM7.

Считать nop'ы можно, но, во-первых, лениво (это после каждой правки расчётной части проверять, подбирать заново...), а во-вторых, частота опроса будет плавать, если алгоритм обработки нелинейный (например, входные значения меньше 100 обсчитаются по одной ветке, больше 100 - по другой).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Harvester   Подскажите по реализации библиотеки для МК?   Aug 25 2015, 08:20
- - adnega   Цитата(Harvester @ Aug 25 2015, 11:20) Од...   Aug 25 2015, 08:24
|- - Harvester   Цитата(adnega @ Aug 25 2015, 11:24) А раз...   Aug 25 2015, 08:33
|- - adnega   Цитата(Harvester @ Aug 25 2015, 11:33) Но...   Aug 25 2015, 08:35
|- - adnega   Цитата(Harvester @ Aug 25 2015, 15:16) а ...   Aug 25 2015, 12:59
- - ViKo   Если все выводы принадлежат одному порту, можно по...   Aug 25 2015, 12:34
- - Harvester   Цитата(ViKo @ Aug 25 2015, 15:34) Если вс...   Aug 25 2015, 13:34
- - demiurg1978   Я с этими МК не работаю. Но, как бы я сделал: наск...   Aug 26 2015, 18:20
- - Harvester   Цитата(demiurg1978 @ Aug 26 2015, 21:20) ...   Aug 27 2015, 06:52
- - jcxz   Цитата(Harvester @ Aug 27 2015, 12:52) Та...   Aug 27 2015, 07:19
- - Harvester   Цитата(jcxz @ Aug 27 2015, 10:19) Затем ч...   Aug 27 2015, 13:18
- - jcxz   Правильное ожидание готовности: Разрешаем прерыван...   Aug 28 2015, 12:10


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

 


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


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