|
14.06.2015, 23:47 | #1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Ускоряем работу Arduino
Очень интересно.
Я только что приехал, завтра на свежую голову посмотрю |
15.06.2015, 20:28 | #2 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Дико извиняюсь, файл arhat_pins2560.h похоже залил из предыдущей версии.
Вот исправленный: PHP код:
|
17.06.2015, 23:44 | #3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Ускоряем работу Arduino
Может выложите архив с библиотекой?
|
18.06.2015, 09:24 | #4 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Конечно. И с инструкцией. Только чуть позже. Я сейчас интегрирую туда вашу Cyberlib ... а там "как оказалось" Мега прописана далеко не полностью, да и функции в .cpp определены не для неё по большей части.
Приведу в порядок - обязательно выложу. Может в отдельную тему. Где-то неделька понадобится, ибо времени "не так много" как хочется. Может в отдельную темку... не думал ещё. |
18.06.2015, 16:24 | #5 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Кстати. Спрошу тут, ибо не знаю "где":
Отлаживая библиотеку и прочие надобности, приходится по нескольку раз перезаливать скетчи в Мегу... вопрос: лимит на 10тыс. прошивок - это "фатально"? В смысле может стоит поберечь машинку ... кто-нибудь доходил до него? P.S. Машинка взята как альтернатива Lego MindStorm рыбенку ... он и сам её заливает от слов "а давай вот так попробуем". |
18.06.2015, 16:56 | #6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Ускоряем работу Arduino
На самом деле для этого типа памяти и 100000 не предел.
Даже если в течении года, каждый день заливать по 27 раз то получится 10000 Но я так понимаю что каждый день заливать по 30 раз Вы не будете |
18.06.2015, 17:58 | #7 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Легко. Вчера правда не заливались... зато позавчера насчитал своих 25 тестовых заливок и "рыбенок" сервой крутил раз 15...
|
18.06.2015, 20:40 | #8 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Так. Месяц (сегодня оказывается ровно 1 месяц как пришла наша Мега и я впервые запустил С/С++ после давнего перерыва..) воспоминаний привел в "затык" и требуется помощь:
Как сохранить в каталоге core И стандартный файл wiring.c (там где типовой таймер задержек) И воткнуть свой собственный в файле arhat_time.c? Ардуино IDE собирает ВСЕ файлы в единую библиотеку core.a, с которой потом линкуется скетч ... если оставить оба файла, то линковщик "сходит с ума" и ругается на двойное определение символа __vector_23 (оно и понятно! как я его понимаю...) Вопрос: можно ли каким-то образом, используя какие-то директивы препроцессора (может предопределенные?!? есть?) указывать линковщику КАКОЕ имя (или из какой части библиотеки - квалификатор какой-нибудь бывает?) брать для этого вектора? То есть, хочется если определено #define _ARHAT_ 0 -- линковать вектор из wiring.c, а ежели #define _ARHAT_ 1 -- то линковать обработчик из arhat_time.c ? как оставить оба файла (может алиас вектору как-то указывать?!?) так, чтобы они оба залезли в либу, но при этом осталась возможность указать какой конкретно сделать выбор из них при линковке? Иначе, всё "ухудшается"... |
19.06.2015, 08:56 | #9 |
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 |
Re: Ускоряем работу Arduino
по вопросу, чего нарыл вчера сам:
1. Линковка файлов производится согласно bootstrap описанию для линкера, который имеет в названии crt"тип_проца".o. Собственно в нем и находятся все сегменты типов памяти, стартовые адреса линковки и типовые названия векторов прерываний их количество и прочая, прочая... там же определены и "волшебные" имена main() и exit(). Лежит это всё в недрах avr-gcc. По-просту: если обработчик прерывания назван "неверно" (__vectorXX), то он тупо НЕ будет воткнут в свое место программы. 2. Ардуино ИДЕ, действительно собирает все исходники из папки "чего-то-там/core/чего-то_ишо" в единую библиотеку с названием core.a И уже потом отдает весь пирог на сборку со скетчем. Как управлять этим процессом (например пришить свою, уже компиленную либу) - так и не нашел. Соответственно, "имя" (любое) может быть определено ИЛИ в библиотеке (но один раз!) ИЛИ в скетче. Отсюда: переопределение вектора прерывания таймера 0 (использован в wiring.c) возможно только при отказе от всего файла wiring.c, где он определен. Впрочем, видимо так и сделаю. Кривость типового таймера, которую считаю "фатальной": Подсчет миллисекунд через накопление остатков в переменной fract. Это приводит к тому, что каждую 42-ю миллисекунду происходит "рывок" таймера в виде 39,40,41, ... , 43, 44 ... сразу на 2 миллисекунды. Соответственно, упрощенное решение для millis() в виде получение подсчитанного числа миллисекунд И без учета этих остатков и текущего состояния счетчика таймера (важны 2 старших бита) приводит к скачкам времени, и совершенно неверной работе например такого кода: millis()%250. Как понимаю, именно из-за таких "глюков" функция delay() реализована через micros(), а не millis(). В итоге. Надо менять всю работу файла wiring.c. Вопрос: насколько будет удобной библиотека, инсталляция которой будет требовать удаления файла из каталога, в частности файла wiring.c? |
19.06.2015, 11:27 | #10 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Ускоряем работу Arduino
Цитата:
|
|
Здесь присутствуют: 24 (пользователей: 0 , гостей: 24) | |
|
|