Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Микроконтроллеры

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 28.06.2018, 19:52   #1
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,156
По умолчанию работа с портами ввода-вывода на Си++

Я как-то давным-давно давал ссылку "Работа с портами ввода-вывода микроконтроллеров на Си++". Очень хорошая статья. Кратко: как писать на С++ , что бы код был как на ассемблере. язык Си тихо курит в сторонке, он этого не сможет.
К чему всё это?
1) что-то мне уже "влом" портировать код с Atmel Studio в Arduino в теме "От простого к сложному..."
2) К тому же, если дальше смотреть скоро придётся всёравно переходить на IAR (у меня там код написан для HC12 )
Таким образом, нужно так "наваять" кодинг, чтоб с лёгкостью перенести кодинг на любые камни, так и на любые платформы (IDE)

вот переделанный стандартный буратино-блинк
Код:
#include "ioports.h" // Author: Konstantin Chizhov
#include "iopin.h"   // Author: Konstantin Chizhov + маленькие дополнения

using namespace IO;

PIN_INIT(LED,Portb,5); // мона так typedef TPin<Portb, 5> LED;


void setup() {
PIN_MODE(LED,OUTPUT); //  мона так  _pinMode<LED>(OUTPUT); // а  мона так  LED::SetDirWrite()

void loop() {

DIGITAL_WRITE_INV(LED); // Toggle 
_delay_ms(1000); //delay(1000); 

}
Здесь вся идея в том чтоб ЗАМЕНИТЬ тяжеловесные и тормознутые функции
такие как pinMode(), digitalWrite() и так далее... на код, который не уступает ассемблеру. Команды все по 2-3 такта.

PS. файлы ioports.h iopin.h имеют в своём коде функции на все случаи жизни, так и для удобства.
Маленькое отступление:
создатели arduino сделали типа таблицу пинов (через #define... )микроконтроллера , например, где к пину под номером 13 прикручен светодиод. Идея хорошая, но и кодить тока мона в ардуино ИДЕ , либо в другой среде разработки подключать через #include соответсвующий ардуино файлы, а это стопудовый мегагимор.
//---------------------
Так вот, автор Костя Чижов, предложил собственный вариант.
На этапе оптимизации кодинга, вдруг памяти камня не хватает, либо нужно шибко быстро дрючить пины портов для LSD, в первую очередь приходит голову воспользоваться ассемблеровскими вставками. Так вот данный вариант не что иное, как альтернатива ассемблеровских вставок в стиле C++. А ардуино библиотеки для ускорения процесса дрыгания пинами или чтения портов которые я встречал всётаки на порядок слабовастеньки в сравнении с кодингом Костика.
PPS. ioports.h -для tiny, atmega, Xmega. Но совсем не трудно, добавить другую линейку микроконтроллеров по фигу хоть 8 хоть 32 разрядные . Просто понять принцип.

Во вложении переделанный Буратino blink
Вложения
Тип файла: rar TestIO.rar (3.3 Кб, 4 просмотров)

Последний раз редактировалось EPA; 30.06.2018 в 07:09.
EPA вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 09:12. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика