Это описание алгоритма - а с помощью какого компилятора и какой системы команд этот алгоритм будет реализован уже без разницы. Хотя изначально рассматривался компилятор ассемблера (для АВР и ПИКушек). Естественно при реализации будут вноситься изменения, свойственные соответствующей системе команд, ядру и аппаратным возможностям используемого МК и синтаксису компилятора (в случае с ЯВУ). Насчет "вечных двигателей"... То пока не актуально.
//крутимся в цикле, пока на выходе приемника 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бит. или аналогичное что нибудь.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения