pokk 0 25 сентября, 2018 Опубликовано 25 сентября, 2018 · Жалоба Моя первая реазилация 1-wire была на прерываниях от таймера и чисто на switch case, это было дикая спагетти кода, потом частично завернул в функции, но все равно не нравилось как получилось, последний раз написал на protothreads, уже как-то глаз радует, а теперь сижу и опять не доволен не охото к каждому проекту пихать protothreads, + оборачивать макросами PT_BEGIN,PT_END Как можно красиво написать похожее чисто на си ? Думаю в сторону переключения адреса, но как это сделать красиво ? на protothreads получилось такое: //PT_YIELD(pt); - выход из функции, + сохранение место выхода #define SetDelay_us(value) TCCR3B=0x01; TCNT3H=(0xFFFF-value*(CPU_CLK/1000000))>>8;\ TCNT3L=(0xFFFF-value*(CPU_CLK/1000000));\ PT_YIELD(pt);\ PT_THREAD(Wire_Reset_thread(struct pt *pt,unsigned char *ReturnValue)){ static unsigned short int Ack[2]; PT_BEGIN(pt); //--------------------------------------------- Ack[0]=0; Ack[1]=0; //--Переключаем линию на выход и записываем 0-- Switch_Out(); SetDelay_us(480); //--Переключаем линию на выход----------------- Switch_In(); //--------------------------------------------- SetDelay_us(80); //--------------------------------------------- Ack[0]=T1; //--------------------------------------------- SetDelay_us(250); //--------------------------------------------- Ack[1]=T1; //--------------------------------------------- if((Ack[0] == 0)&&(Ack[1] ==1)){ *ReturnValue=SENSOR_INIT_VALIDATION_SUCCESS; }else{ //------------------------------------------------------------------------------------------ //*ReturnValue=SENSOR_INIT_VALIDATION_FAIL; if((Ack[0]==1)&&(Ack[1]==1)){ *ReturnValue=TYPE_T_SHORT_CIRCUIT_1; }else{ *ReturnValue=TYPE_T_SHORT_CIRCUIT_0; } //------------------------------------------------------------------------------------------ } //--------------------------------------------- PT_END(pt); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 25 сентября, 2018 Опубликовано 25 сентября, 2018 · Жалоба Как можно красиво написать похожее чисто на си ? Взять что-нибудь уже готовое: тыц. А вопросы красиво/некрасиво - это все индивидуально и крайне субъективно :laughing: не охото к каждому проекту пихать protothreadsТак поставьте нормальную RTOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pokk 0 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Взять что-нибудь уже готовое: тыц. Ну так там везде в функции tickDelay, ставят цикл ожидания, и все остальные процессы останавливаются на это время. Так поставьте нормальную RTOS Что бы потом пихать в проект ещё и RTOS, когда надо снять данные с датчика температуры и выдать их в usart =) Прерывания от таймера, это отдельный процесс как в RTOS, только без сохранения контекста =( + это очень легко можно запустить на любом процессоре, разобравшись только в таймере и кинув в него 1 функцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Коли вы так боитесь RTOS, то пользуйтесь и дальше неким protothreads. В чем проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Ну так там везде в функции tickDelay, ставят цикл ожидания, и все остальные процессы останавливаются на это время. Учитесь обходиться без задержек. "Везде ставят цикл ожидания" только чайники. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pokk 0 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Учитесь обходиться без задержек, это я умею (см первый пост там их нету). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Учитесь обходиться без задержек. "Везде ставят цикл ожидания" только чайники.С чего это? Решение задачи определяется задачей. И если хватает времени ждать и нет необходимости делать в это время что-то ещё то задержки могут быть самым надёжным решением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба С чего это? Решение задачи определяется задачей. Обратите внимание на слово "везде". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Имхо, вся эта тема какая-то бессмысленная. Как-будто ТС чем-то хотел похвастать, но не ясно чем именно :wacko: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба При отсутствии аппаратного 1wire принято использовать uart https://www.maximintegrated.com/en/app-note...ndex.mvp/id/214 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 6 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Да использовал я такое ранее, инвертора от тини-лоджик брал. Особенность в точности UARTа, кварц у проца должен быть точный, с малым разбросом +/-20ppm или лучше и кратный стандарту скорости UARTA. Иначе чудеса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Особенность в точности UARTа, кварц у проца должен быть точный, с малым разбросом +/-20ppm или лучше и кратный стандарту скорости UARTA. Иначе чудеса. Какие 20ppm??? У 1-wire требования к таймингам крайне гуманные О каком МК идет речь? Какой частоты был этот "волшебный" кварц и какая была тактовая частота МК? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба . . . Как можно красиво написать похожее чисто на си ? Думаю в сторону переключения адреса, но как это сделать красиво ? . . . Красота наводит на мысль использования автомата (FSM) + события от таймера по сработке от CCR. CCR - перезагружается на требуемый интервал. Но красиво не всегда (разве что самолет) оптимально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 6 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Какие 20ppm??? У 1-wire требования к таймингам крайне гуманные О каком МК идет речь? Какой частоты был этот "волшебный" кварц и какая была тактовая частота МК? Ну ка раскажите мне про этот гуманизм, особенно про джиттер фронтов у 1-wire. Даже если от STM 4-е армы, потребуют хороших инверторов перед UART. И не любой частоты кварц даст, через внутренний PLL, нужной точности частоту. Опять таки если придерживаемся стандарта 1-wire, а не его интепретаций, то есть для того чтобы работать с теми 1-wire датчиками, таблетками и тп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Ну ка раскажите мне про этот гуманизм, Да этому "стандарту" уже почти 30 лет, обсосан до костей. Тайминги такие, что заведется с полпинка на любом античном МК даже на встроенном RC-генераторе. особенно про джиттер фронтов у 1-wire. Даже если от STM 4-е армы, потребуют хороших инверторов перед UART. И не любой частоты кварц даст, через внутренний PLL, нужной точности частоту. Нда, случай крайне сложный, похоже на некий "распил". Вангую, что для поддержки USB пришлось ставить термостабилизированный кварцевый генератор с 5-й приемкой :laugh: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться