Тема: Arduino
Показать сообщение отдельно
Старый 17.01.2017, 20:01   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Статика

Большинство моих поделок дальше макетки не уходят.
Платы нигде не заказываю и не травлю, если чо-то и паяю, то вот на таких макетках:



Можно залочить кристал, чтобы прошивку нельзя было считать, но я никогда этого не делал, потому что не было такой нужды. Про реализации USB хоста я не слышал, да и USB флешки никто в здравом уме подключать не будет, а вот SD карты без проблем, но опять же без аппаратной поддержки (реализуется программно путём дёрганья ног по специальному протоколу).Ну точнее, есть аппаратный SPI, который обычно и используют для подключения к SD картам, но он отвечает лишь за отправку и приём одного байта по проводам, а сам протокол реализуется программно. Но ничто не мешает и SPI сделать программно (многие, я в том числе, делают так на микроконтроллере ATtiny85, у которого нет аппаратного SPI).

Прошивки пишу на чистом Си, ардуиновские среду и либы не использую.

Программа, если писать на Си, выполняется как обычно, точка входа - функция main, как только она закончилась, контроллер перестаёт что-либо делать (ну кроме прерываний, наверно). Прерывания - это что-то вроде отдельных функций, которые вызываются по определённому событию. То есть если сейчас выполнялся основной поток программы, то он останавливается на текущей инструкции, выполняется прерывание, а потом программа продолжает выполнение с того момента, где остановилась. Нужно постоянно следить за атомарностью и отключать прерывания во время выполнения операций, для которых важна целостность. Если где-то в основном потоке программы делаем counter++; и в то же время где-то в прерывании есть counter = 0; то всё обязательно в какой-то непредсказуемый момент пойдёт не так, потому что инкремент занимает несколько инструкций процессора и прерывание может вклиниться где-то между ними.

Прерывания есть разные, например: через каждые N тактов процессора, приём байта по SPI или UART, при смене логического уровня на ножке (повесь туда кнопку и будешь иметь событие нажатия этой кнопки, которое мгновенно реагирует). Впрочем кнопки обычно обрабатывают в основном цикле программы, потому что кнопки часто объединяют в матрицы (как в клавиатурах) и нужно производить их опрос.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (18.01.2017)