Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно писать библиотеки для микроконтролле 
:(
    Опции темы
Romikgy
Дата 20.7.2018, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(osandr @  20.7.2018,  11:56 Найти цитируемый пост)
Бесконечное ожидание флага SPIF. Т.е. если что-то пошло не так, то программа просто зависает и никто не знает причины 

у атмела хардварная передача SPI , если что то пошло не так, значит процу жопа. Если железо ок , то ответ всегда получишь .... 
Цитата(osandr @  17.7.2018,  14:40 Найти цитируемый пост)
Пишу программы для микроконтроллеров на Си достаточно долго.

для каких микроконтроллеров  вы долго писали ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Mazzi
Дата 20.7.2018, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



"Долго писал" - это сколько?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
osandr
Дата 23.7.2018, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.7.2018

Репутация: нет
Всего: нет



Romikgy
Цитата
у атмела хардварная передача SPI , если что то пошло не так, значит процу жопа. Если железо ок , то ответ всегда получишь .... 


Если абонент не ответит, то соответственно и ответ не получишь, а следовательно программа будет зависать на ожидании. Это к примеру. 
8-битные атмелы - это уже вчерашний день. Если нравятся 8-битные микроконтроллеры, посмотрите хотя бы описание регистров для STM8 любого.
Если не работает SPI, то это еще не значит что процу жопа. Проц и остальная периферия могут успешно работать и дальше.

Регистр статуса модуля SPI STM8:
Код

Bit 7BSY: Busy flag
0: SPI not busy
1: SPI is busy in communication 
This flag is set and reset by hardware.
Note: BSY flag must be used with cautious: refer to Section 20.3.7: Status flags on page 267and 
Section 20.3.8: Disabling the SPI on page 268
Bit 6OVR: Overrun flag
0: No Overrun occurred
1: Overrun occurred
This flag is set by hardware and reset by a software sequence.
Bit 5MODF: Mode fault
0: No Mode fault occurred
1: Mode fault occurred
This flag is set by hardware and reset by a software sequence.
Bit 4CRCERR: CRC error flag
0: CRC value received matches the SPI_RXCRCR value
1: CRC value received does not match the SPI_RXCRCR value
This flag is set by hardware and cleared by software writing 0.
Bit 3WKUP: Wakeup flag
0: No wakeup event occurred
1: Wakeup event occurred
This flag is set on the first sampling edge on SCK when the STM8 is in Halt mode and the SPI is 
configured as slave.
This flag is reset by software writing 0.
Bit 2 Reserved
Bit 1TXE: Transmit buffer empty
0: Tx buffer not empty
1: Tx buffer empty
Bit 0RXNE: Receive buffer not empty
0: Rx buffer empty
1: Rx buffer not empty


Что, здесь тоже предложите бесконечно ждать установки бита RXNE?


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

Цитата

для каких микроконтроллеров  вы долго писали ?


PIC 12, 16, 18, dsPIC, AtTiny, AtMega, STM8, STM32, MSP430, Microblaze, PowerPC, NXP, Zynq
Писал программы также для Raspberry PI и Orange PI
Достаточно будет?


Mazzi
Цитата

"Долго писал" - это сколько? 


8 лет.

Кто-то еще может высказаться по делу?


PM MAIL   Вверх
Romikgy
Дата 23.7.2018, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(osandr @  23.7.2018,  08:52 Найти цитируемый пост)
8-битные атмелы - это уже вчерашний день.

возможно , но пока что по популярности еще достаточно держатся вверху...

Цитата(osandr @  23.7.2018,  08:52 Найти цитируемый пост)
Если абонент не ответит, то соответственно и ответ не получишь, а следовательно программа будет зависать на ожидании. Это к примеру. 

вы на практике такое сами можете проверить ? 
Цитата(osandr @  23.7.2018,  08:52 Найти цитируемый пост)
8 лет.


Цитата(osandr @  23.7.2018,  08:52 Найти цитируемый пост)
PIC 12, 16, 18, dsPIC, AtTiny, AtMega, STM8, STM32, MSP430, Microblaze, PowerPC, NXP, Zynq

ИМХО после такого срока реальной работы и с таким количеством устройств , вопросы о правильности должны были пройти ооочень давно .... или вы ооочень медленный в понимании человек, и для понятия правильности или не правильности вам необходимо более 8 лет практики ....
Цитата(osandr @  23.7.2018,  08:52 Найти цитируемый пост)
Кто-то еще может высказаться по делу?

Ждите, возможно кто и ответить , но я бы посоветовал обратится на проф форумы по МК  с таким вопросом....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
osandr
Дата 23.7.2018, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.7.2018

Репутация: нет
Всего: нет



Romikgy, так поделитесь своим пониманием правильности, к которому Вы пришли за время вашей практики работы с реальными устройствами.
В вашей практике были случаи, когда приходилось писать отдельные библиотеки, используемые другими программистами? Чтобы можно было скомпилить вашу библиотеку в бинарный файл и использовать в любой программе без привязки к конкретному устройству (но для конкретного чипа или семейства)?

Цитата

Ждите, возможно кто и ответить , но я бы посоветовал обратится на проф форумы по МК  с таким вопросом.... 


Зачем тогда создали ветку по МК на форуме? Я думал у вас проф. форум...

Это сообщение отредактировал(а) osandr - 23.7.2018, 11:03
PM MAIL   Вверх
Romikgy
Дата 23.7.2018, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(osandr @  23.7.2018,  10:02 Найти цитируемый пост)
Зачем тогда создали ветку по МК на форуме? Я думал у вас проф. форум...

Это вопрос к вам, вы же топик стартер....
Это проф форум по программированию (в основном для ПК), эмбедед программирование не его профиль....
в реальных проектах ни кто не тянется к реализации универсальных решений (под все процы). То что реализуется , должно четко отрабатываться без ошибок и зависаний на конкретном процессоре! 
Большой проект который работает с многими процессорами это OpenWRT , и даже в нем грубо говоря создали множество отдельных проектов под разные процессоры! т.е. мало кто хочет играться с универсальностью! Но есть проекты у которых она присутствует.  Один факт , если вы собрались писать универсальный проект/библиотеку вы должны знать все подводные камни всех поддерживаемых процессоров и их периферии. Даже опенсорс проекты такого дать не могут.  

ЗЫ вы практически проверили работу SPI на атмеле на предмет зависания без устройства с другой стороны?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
osandr
Дата 23.7.2018, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.7.2018

Репутация: нет
Всего: нет



Romikgy, под универсальностью в данном случае я имею ввиду код, который легко переносится без допиливания в любой другой проект на одном и том же контроллере. К примеру написали один раз драйвер для работы с SPI и больше его не переписываем под каждый конкретный проект для одного и того же камня. Я вижу три варианта реализации: основанный на поллинге, основанный на прерываниях, основанный на ОС (по сути тоже поллинг, но грамотно используется процессорное время). На голом железе универсальный драйвер можно реализовать на основе поллинга, недостатки которого я описал выше (то, что на практике модуль SPI не виснет - на это надеяться неправильно, правильнее предполагать, что любой модуль может дать сбой). Интересно, может есть более красивые решения на прерываниях без жесткой привязки к конкретному проекту? К примеру драйвер для работы с UART я часто реализовываю с применением кольцевого буфера. Функция записи помещает данные в буфер, откуда они отправляются по прерываниям. Аналогично принятые данные ложатся в буфер по мере поступления. Программа не зависает на ожидании байта из UART и может делать какие-то другие вычисления. Когда данные понадобятся, программа "спросит" сколько их хранится в буфере и дальше примет решение забирать или пока выполнить другие действия. Кольцевой буфер можно реализовать на DMA в кольцевом режиме (в атмегах нет DMA). Но это конкретно UART. С SPI сложнее в том плане, что на каждый отправленный байт зачастую нужно сразу же получить ответ и обработать его, т.е. тут уже не получается просто складировать данные в буфер. Ну или хотя бы потому, что пока не будет получен ответ, нельзя отправлять новые данные на шину. Тоже самое можно отнести к интерфейсу I2C или каким-то другим. Может так понятнее объяснил что именно я хочу?
PM MAIL   Вверх
Romikgy
Дата 23.7.2018, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
 который легко переносится без допиливания в любой другой проект на одном и том же контроллере

один процессор , уже легче
Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
то, что на практике модуль SPI не виснет - на это надеяться неправильно

это не надеяться , это особенности работы железа...

Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
 С SPI сложнее в том плане


Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
Тоже самое можно отнести к интерфейсу I2C

это все последовательные интерфейсы, и работать с ними можно по аналогии как и с юарт... просто спи и и2ц более стандартизованы и рациональнее обрабатывать их сразу
Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
Ну или хотя бы потому, что пока не будет получен ответ, нельзя отправлять новые данные на шину. 

никто не запрещает сделать буфер достаточно большим , что бы передавать сразу несколько пакетов... 
Цитата(osandr @  23.7.2018,  11:55 Найти цитируемый пост)
Может так понятнее объяснил что именно я хочу? 

не до конца... то что вы описали , делается использованием модулей , отдельная пара *.c *.h 
один раз написали (с учетом всех особенностей железа ) и потом кидаете эти файлы в другие проекты...


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
osandr
Дата 23.7.2018, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.7.2018

Репутация: нет
Всего: нет



Romikgy
Цитата

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


Отлично! Пример в студию. Хотелось бы увидеть Вашу реализацию.

Мне кажется Вы слабо понимаете принцип обмена по SPI. Зачастую общение с ведомым устройством выполняется по определенному протоколу (для примера адрес, тип операции, данные). Обмен происходит в двух направлениях одновременно. Если после отправки данных на шину MOSI не принять данные, которые пришли по MISO, а сразу же сделать новую посылку по MOSI, то на следующей посылке у Вас произойдет переполнение приемного буфера SPI. Чтобы этого не произошло, приходится каждый раз дожидаться приема данных. Объясните каким образом вы задействуете здесь буфер "достаточно большой, что бы передавать сразу несколько пакетов"? Что по вашему пакет? Пакет в правильном понимании - это некий набор данных, а не один байт.

Это сообщение отредактировал(а) osandr - 23.7.2018, 15:39
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1285 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.