Это описание алгоритма - а с помощью какого компилятора и какой системы команд этот алгоритм будет реализован уже без разницы. Хотя изначально рассматривался компилятор ассемблера (для АВР и ПИКушек). Естественно при реализации будут вноситься изменения, свойственные соответствующей системе команд, ядру и аппаратным возможностям используемого МК и синтаксису компилятора (в случае с ЯВУ). Насчет "вечных двигателей"... То пока не актуально.
//крутимся в цикле, пока на выходе приемника 0 while (1) { if (PINB& (1<<PB0)) break; //если прочитали 1 — выходим из цикла }
//окажемся здесь, когда поймаем фронт
_delay_us (SAMPLE_A); //ждем время А if (! (PINB& (1<<PB0))) return 255; //если в точке А прочитали 0 — значит это не килок, выходим из функции
_delay_us (SAMPLE_B); //ждем время от А до B if (PINB& (1<<PB0)) bit=0; else bit=1; //если в точке B прочитали 1 — значит приняли бит данных 0, если прочитали 0 — то приняли бит 1.
_delay_us (SAMPLE_С); //ждем время от B до C if (PINB& (1<<PB0)) return 255; //если в точке C прочитали 1 — значит сигнал не килок, выходим.
//возвращаем как результат принятый бит. return bit; }
Цитата:
Build started 9.6.2023 at 18:29:41 avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT CAME.o -MF dep/CAME.o.d -c ../CAME.c ../CAME.c: In function `keeloq_receive': ../CAME.c:5: error: stray '\209' in program ../CAME.c:15: warning: implicit declaration of function `_delay_us' ../CAME.c:21: error: stray '\209' in program make: *** [CAME.o] Error 1 Build failed with 2 errors and 1 warnings...
И вообще,что такое stray'\209' ?
В программе и чисел таких не присутствует,209 код ошибки ?
Нету там ничего. Даже по ключевому слову stray (перевод заблудиться,потеряться)ничего. Такое ощущение,что ищу p.s. добавьте такой смайлик себе на форум,админы. Дарю бесплатно.
stray = паразитный т.е строка имеет паразита типа 209. (ошибка 209). И вообще -то отличия между логическими и бинарными операциями имеются... Может таки есть смысл оценивать истинность/ложь результата? т.е не if (PINB& (1<<PB0)){}, а if ((PINB& (1<<PB0))){}......
Допилил таки алгоритм для теста (и макеткой помучал). Индикатором является окошко терминала (любого - хош самой IDE, хош иного происхождения) на ПК. схемка теста: https://img.radiokot.ru/files/20529/365ylytg02.GIF и сама прожка:
https://electronix.ru/forum/index.php?a ... c&id=33669 Там чувак в конце объясняет что надо делать в случае такого варнинга. C:/WinAVR/avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." In file included from C:/WinAVR/avr/include/avr/delay.h:37, from ../CAME.c:3: Тот кто задавал вопрос,вроде как понял,исправил и затих. Или я такой совсем тупой,что ничего не получается.И файлы эти нашёл и посмотрел, avr/delay.h and util/delay.h , и название исправил,и то же самое остаётся.
//крутимся в цикле, пока на выходе приемника 0 while (1) { if (PINB& (1<<PB0)) break; //если прочитали 1 — выходим из цикла }
//окажемся здесь, когда поймаем фронт
_delay_us (SAMPLE_A); //ждем время А if (PINB& (1<<PB0)) return 255; //если в точке А прочитали 0 — значит это не килок, выходим из функции
_delay_us (SAMPLE_B); //ждем время от А до B if (PINB& (1<<PB0)) bit=0; else bit=1; //если в точке B прочитали 1 — значит приняли бит данных 0, если прочитали 0 — то приняли бит 1.
//_delay_us (SAMPLE_С); //ждем время от B до C //if (PINB& (1<<PB0)) return 255; //если в точке C прочитали 1 — значит сигнал не килок, выходим.
//возвращаем как результат принятый бит. return bit; }.
Это что за "адская смесь" в текстке то? не то WinAVR, не то адурино (не то еще Х/З что)... Ужшш как-то в одном компиляторе работать надо... Да и глупостей понаворочено ...
Это кусок вашего энкодера засунут,чтобы смешнее было. Это не считается. Щас мы его уберём. Вот так. Спойлер#include "avr/io.h" #include "avr/interrupt.h" #include "avr/delay.h" char keeloq_receive (void) { char bit,SAMPLE_A,SAMPLE_B;
//крутимся в цикле, пока на выходе приемника 0 while (1) { if (PINB& (1<<PB0)) break; //если прочитали 1 — выходим из цикла }
//окажемся здесь, когда поймаем фронт
_delay_us (SAMPLE_A); //ждем время А if (PINB& (1<<PB0)) return 255; //если в точке А прочитали 0 — значит это не килок, выходим из функции
_delay_us (SAMPLE_B); //ждем время от А до B if (PINB& (1<<PB0)) bit=0; else bit=1; //если в точке B прочитали 1 — значит приняли бит данных 0, если прочитали 0 — то приняли бит 1.
//_delay_us (SAMPLE_С); //ждем время от B до C //if (PINB& (1<<PB0)) return 255; //если в точке C прочитали 1 — значит сигнал не килок, выходим.
//возвращаем как результат принятый бит. return bit; } Спойлерrm -rf CAME.o CAME.elf dep/* CAME.hex CAME.eep Build succeeded with 0 Warnings... avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT CAME.o -MF dep/CAME.o.d -c ../CAME.c In file included from ../CAME.c:3: C:/WinAVR/avr/include/avr/delay.h:36:2: warning: #warning "This /*file has been moved to <util/delay.h>." In file included from C:/WinAVR/avr/include/avr/delay.h:37, from ../CAME.c:3: C:/WinAVR/avr/include/util/delay.h:136:3: warning: #warning "F_CPU not defined for <util/delay.h>" avr-gcc.exe -mmcu=atmega16 CAME.o -o CAME.elf C:/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm16.o: In function `__vectors': ../../../../../avr-libc-1.4.4/crt1/gcrt1.S:51: undefined reference to `main' make: *** [CAME.elf] Error 1 Build failed with 1 errors and 2 warnings...
Это чтоб не думали что мы только своими проблемами озабочены,и ничего другого не читаем.
Последний раз редактировалось главный колбасист Сб июн 24, 2023 09:02:43, всего редактировалось 1 раз.
Смешно, когда пользователь ПК не следит за текущим языком редактора при написании программы. А затем с остервенением "ищет ошибку".... По крайней мере в стиле адуринки этот "опус дуба" выглядит вот так:
Спойлер
Код:
// описание(объявление) функции char keeloq_receive (void); // обЪявляем переменную для приема данных char oak;
void setup() { // put your setup code here, to run once:
// использование функции или тут oak = keeloq_receive();
}
void loop() { // put your main code here, to run repeatedly:
// использование функции или тут oak = keeloq_receive();
}
// реализация функции char keeloq_receive() { // объявление и иницивлизация "внутренних переменных" char temp = 0; // * в ардуино функция delayMicroseconds принимает unsigned int * const unsigned int SAMPLE_A = 100; // "от фонаря" const unsigned int SAMPLE_B = 150; // "от фонаря" const unsigned int SAMPLE_C = 120; // "от фонаря" //крутимся в цикле, пока на выходе приемника 0 do { temp = PINB & (1<<PB0); } while (!temp); //если прочитали 1 — выходим из цикла //окажемся здесь, когда поймаем фронт //_delay_us (SAMPLE_A); //ждем время А delayMicroseconds(SAMPLE_A); //ждем время А "по адуриньи" //если в точке А прочитали 0 — значит это не килок, //выходим из функции if (!(PINB & (1<<PB0))) {return -1;}; //_delay_us (SAMPLE_B); //ждем время от А до B delayMicroseconds(SAMPLE_B); //ждем время B "по адуриньи" //если в точке B прочитали 1 — значит приняли бит данных 0, // если прочитали 0 — то приняли бит 1. temp = (PINB & (1<<PB0)) ? 0 : 1; return temp; //_delay_us (SAMPLE_С); //ждем время от B до C delayMicroseconds(SAMPLE_C); //ждем время C "по адуриньи" //если в точке C прочитали 1 — значит сигнал не килок, выходим. if ((PINB& (1<<PB0))) {return -1;}; }
//---------- //---------- файла/end of file---------------------
в первоисточнике в SAMPLE_С последний символ набран на "ру" вместо "англ"
Последнее время стал весьма затруднен доступ к инсталляторам старо-добрых программ (включая свободно- бесплатные)... Попробую сгрузить в сундук свои старые резервно-архивные запасы - мало ли чего может приключиться...
А что такое инсталяторы старых добрых программ? Сами программы,чё ли ? Так там в каждом дистрибутиве свой инсталятор содержится. з.ы. Дал бы мне кто нибудь эклипс для 32бит. или аналогичное что нибудь.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения