|
06.12.2014, 08:53 | #1 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
По просьбам трудящихся, кусок кода для CyberLib.h
PHP код:
PHP код:
Со считыванием данных с кнопки 4,2МГц. Проверялось на Arduino IDE 1.5.8 + Arduino_STM32 |
06.12.2014, 11:58 | #2 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Maple Mini
Круто, с такой частотой можно анализировать протоколы разных устройств
Например шины управления в автомобилях |
06.12.2014, 20:09 | #3 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
Не знаю как на счет анализатора, но это получился почти хардварный уровень SPI.
А для протоколов, и не только, я приметил себе такую не дорогую штучку: http://www.ebay.com/itm/USB-Logic-24...item2c868bef92 к ней вот такую программку и проще и без заморочек получится |
06.12.2014, 22:48 | #4 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Maple Mini
Действительно, за такую цену лучше купить
|
12.12.2014, 12:49 | #5 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
ну что ж реализация проекта по созданию функций быстрого дерганья по аналогии с CyberLib подошла к своему логическому завершению. Осталось, разве что, получше раскурить BitBand и модернизировать "Arduino STM32-ASP" в части резервирвоания выделенной памяти под переменные побитовой записи/чтения в режиме BitBand.
(Здесь достаточно подробно описана методология: http://www.micromouseonline.com/2013...ding-approach/) Результатом проделаной работы я доволен. Для сравнительного тестирования шатных функций digitalRead digitalWrite, а так же различных методов я написал небольшой код. Тестировал в 4х режимах: Strobe (тупo дергаем ногу CLK), READ - считывание битов со второй ноги + STROBE . Write - передача битов + STROBE и TRANSFER это считывание и пересылка данных одновременно + STROBE. результаты получились такими: Код:
===================== STROBE ===================== standart - F: 865kHz / 83 CPU cycles / dur: 4621 ms / j=0 / i*k=4000000 OneWire(7b)- F: 3048kHz / 23 CPU cycles / dur: 1148 ms / j=0 / i*k=3500000(1312ms for 8bit) PIN_MAP - F: 9909kHz / 7 CPU cycles / dur: 403 ms / j=0 / i*k=4000000 PM w/o for - F: 15964kHz / 4 CPU cycles / dur: 250 ms / j=0 / i*k=4000000 =================== READ + STROBE ===================== standart - F: 591kHz / 121 CPU cycles / dur: 6764 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1752kHz / 41 CPU cycles / dur: 1997 ms / j=0 / i*k=3500000(2282ms for 8bit) PIN_MAP - F: 4711kHz / 15 CPU cycles / dur: 849 ms / j=0 / i*k=4000000 PM w/o for - F: 8094kHz / 8 CPU cycles / dur: 494 ms / j=0 / i*k=4000000 ================== WRITE + STROBE ===================== standart - F: 593kHz / 121 CPU cycles / dur: 6737 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1722kHz / 41 CPU cycles / dur: 2032 ms / j=0 / i*k=3500000(2322ms for 8bit) PIN_MAP - F: 3569kHz / 20 CPU cycles / dur: 1120 ms / j=0 / i*k=4000000 PM w/o for - F: 11031kHz / 6 CPU cycles / dur: 362 ms / j=0 / i*k=4000000 ==================== TRANSFER ==================== standart - F: 453kHz / 158 CPU cycles / dur: 8824 ms / j=0 / i*k=4000000 OneWire(7b)- F: 1174kHz / 61 CPU cycles / dur: 2978 ms / j=0 / i*k=3500000 (3403ms for 8bit) PIN_MAP - F: 2572kHz / 27 CPU cycles / dur: 1554 ms / j=0 / i*k=4000000 PM w/o for - F: 5515kHz / 13 CPU cycles / dur: 725 ms / j=0 / i*k=4000000 1. с использованием стандартных функций digitalRead и digitalWrite. 2. через указатели на регистры.(как в библиотеке OneWire) 3. Мой метод. 4. Мой, без использования цикла. Для ускорения нужно (пере)дописать массив в файле \hardware\Arduino_STM32\ STM32F1XX\variants\maple_mini\board.cpp и дополнить описание структуры в файле: \hardware\Arduino_STM32\STM32F1XX\cores\ maple\wirish_types.h и написать 2 макроса: Код:
#define _digitalRead(pin) (pin < BOARD_NR_GPIO_PINS) ? (*(volatile uint32*)PIN_MAP[pin].BB_IDR) : 0 #define _digitalWrite(pin,val) (pin < BOARD_NR_GPIO_PINS) ? (PIN_MAP[pin].gpio_device->regs->BSRR=((PIN_MAP[pin].gpio_pMASK)<<((!val)?16:0))) : (NULL) Чуть ниже в сообщениях есть мой код использованный для сравнительного тестирования. Последний раз редактировалось HiddenPilot; 12.12.2014 в 19:46. |
12.12.2014, 14:49 | #6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Maple Mini
Результы методом PM w/o впечатляют
|
12.12.2014, 15:11 | #7 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
А это такой же метод как и PIN_MAP, только с вручную развернутым циклом
Видима на простых операциях без условий и циклов системе предсказания команд проще предсказывать и кэшировать данные в кэш. как только начинаются витьеватые условия сразу просадка из за пропуска тактов для считывания новых команд с флеша Последний раз редактировалось HiddenPilot; 12.12.2014 в 15:15. |
12.12.2014, 20:21 | #8 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
Подправил функцию передачи данных(немного упростил). Теперь передача и прием данных с помощью развернутого цикла действительно впечатляет!
10Мгц на передачу, 8 МГц на прием. Теперь я полностью доволен, больше уже с камня не выжать т.к.: На прием 1бита с перещелкиванием строба тратится всего 8 тактов. На передачу 1 бита со стробом 6 тактов На строб всего 4 такта.... |
13.12.2014, 22:01 | #9 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Maple Mini
А плюшки все прибавляются и прибавляются
Доработал тут немного внешний вид и вытащил кой какие удобные мне настройки в меню Arduino IDE. Ускоренные функции digitalRead/Write будут внедрены прямо в Arduino STM32. Пункт в меню для них я уже подготовил |
13.12.2014, 22:08 | #10 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Maple Mini
Надеюсь что ты выложишь свою сборку IDE для общего пользования?
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|