Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Песочница

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 14.03.2018, 18:06   #111
EPA Меню Пользователя
Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 994
По умолчанию Re: Эмулятор брелка

Так я и написал )))
EPA вне форума   Ответить с цитированием
Старый 14.03.2018, 18:10   #112
legrand Меню Пользователя
Член клуба
 
Регистрация: 08.09.2011
Сообщений: 282
По умолчанию Re: Эмулятор брелка

Цитата:
Сообщение от EPA
Не угадал! Будет работать через n-раз

в данном случае функция SendRandom(r1) работает с копией r1, а не с самой переменной r1.

Я видал много чудес связанных с особенностями компиляторов Си, поэтому не все так однозначно. Не факт что из-за одинаковых имен,двух разных перменных r1 и r1 не заработает. Он может создать локальную переменную r1 внутри процедуры SendRandom, но внутри процедуры продолжит работать с глобальной переменной r1.

Я исходил из того что раз на тинке проходил такой кусок кода, то и здесь должен был пройти. Хотя формально ты прав.
legrand вне форума   Ответить с цитированием
Старый 14.03.2018, 18:28   #113
EPA Меню Пользователя
Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 994
По умолчанию Re: Эмулятор брелка

Да уж лучше не допускать синонимов, не то что компилятор учудит, да сам потом запутаешся, как в данном случае. Зачем нам лишние проблемы их и так хватает.

Добавлено через 11 минут
А знаешь в чём самый прикол в этом коде, что если что хрен найдёшь баг? даже если всё правильно написал. Камень работает в восмиразрядной системе, а переменная у нас long -32 разряда. И когда она будет собирать крутить вертеть с с1 -32разряда, любой дребезг контактов может ушатать эту переменную. Научно: неатомарный процесс. Так что ХЗ в жизни всякое бывает. А дребезг будет к бабушке не ходи.

Последний раз редактировалось EPA; 14.03.2018 в 18:53.
EPA вне форума   Ответить с цитированием
Старый 14.03.2018, 20:33   #114
legrand Меню Пользователя
Член клуба
 
Регистрация: 08.09.2011
Сообщений: 282
По умолчанию Re: Эмулятор брелка

Цитата:
Сообщение от EPA
Да уж лучше не допускать синонимов, не то что компилятор учудит, да сам потом запутаешся, как в данном случае. Зачем нам лишние проблемы их и так хватает.

Добавлено через 11 минут
А знаешь в чём самый прикол в этом коде, что если что хрен найдёшь баг? даже если всё правильно написал. Камень работает в восмиразрядной системе, а переменная у нас long -32 разряда. И когда она будет собирать крутить вертеть с с1 -32разряда, любой дребезг контактов может ушатать эту переменную. Научно: неатомарный процесс. Так что ХЗ в жизни всякое бывает. А дребезг будет к бабушке не ходи.

Немного подумав, в связи с тем что при нажатии на любую кнопку, происходит подача питания,а при отжатии снятие питания с проца. То добиться для АМ моторз изменения псевдоплавающей части так не получится. Ведь при каждом нажатии(загрузке проца) будет происходит одна и та же инициализация R1. А соответственно, при отжатии(снятии питания с проца) эта переменная будет стираться из памяти. И при новом нажатии будет снова та же переменная R1. То есть на первый взгляд без сохранения в реальном энергонезависимос епрома проца результата в виде открывания не будет.
legrand вне форума   Ответить с цитированием
Старый 14.03.2018, 22:29   #115
dreamwait Меню Пользователя
Вступил в клуб
 
Регистрация: 11.11.2015
Сообщений: 79
По умолчанию Re: Эмулятор брелка

Именно так - поэтому переменная r1 и пишется в епром.
Про return - а где там void? Его там нет Так что без проблем должна вернуть r1 и r3 - как я это понимаю. Через пару дней пики будут - будем посмотреть.
dreamwait вне форума   Ответить с цитированием
Старый 15.03.2018, 00:22   #116
EPA Меню Пользователя
Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 994
По умолчанию Re: Эмулятор брелка

Цитата:
Сообщение от dreamwait
Именно так - поэтому переменная r1 и пишется в епром.
Про return - а где там void? Его там нет ....

Да ну )))))
Код:
void SendRandom (unsigned char r1){
    if (r1 < 244)
  { r1 = r1 + 0x11;}
    else
       {
        r1 = 0x01;
       }
    r3=r1*101;
}
Выделил красным цветом

Добавлено через 3 минуты
В твоем коде для тини подключена библиотека
#include <eeprom.h>
eeprom unsigned int r1;

А у russo_turisto еепром не предусмотрен, соответсвенно r1 - хрен когда запишется у тебя в еепром. Вот что хотел до тебя донести legrand и я тоже, если внимательно почитаешь

Добавлено через 41 минуту
Вот так хотя бы сделай

Код:
void SendRandom (unsigned char _r1){
 
    _r1 =(_r1 < 244) ?  _r1 + 0x11 : 1;
    r3=_r1*101;
  eeprom_write(_r1, адрес памяти);  // функция записи в eeprom  числа в ячейку памяти

}
ну и перед функцией SendRandom (r1)
Код:
....
r1= eeprom_read(адрес в памяти ); // / функция чтения из eeprom  

 SendRandom (r1);
....
или тупо SendRandom (eeprom_read(адрес в памяти ));
Всё больше тебе ничего больше не надо делать.

Добавлено через 47 минут
PHP код:
//чтение данных из EEPROM спиженные со всемирной помойки, так что перепроверь
unsigned char eeprom_read (unsigned int address)
{
while(
WR) continue;     //  пока идёт цикл записи, читать из EEPROM нельзя!
EEADR=address;          //  адрес
SetBit(EECON1,0);       //  разрешаем чтение
return EEDATA;

PHP код:

//запись данных в EEPROM
void eeprom_write (unsigned int address,  unsigned char data)
{
  while(
WR) continue;     //  ожидаем пока завершится предыдущий цикл записи
EEADR=address;          //  адрес
EEDATA=data;            //  данные
SetBit(EECON1,2);       //  разрешаем запись в EEPROM
CARRY=0;                //  используем регистр для запоминания наличия прерываний
if(GIECARRY=1;        //  запоминаем, если были приревания
GIE=0;                  //  запрет приреваний
EECON2=0x55;            //  обязательная последовательность
EECON2=0xAA;
SetBit(EECON1,1);       //  запуск цикла записи
ClrBit(EECON1,2);       //  сбрасываем WREN
if(CARRYGIE=1;        // разрешаем прерываня, если нужно


Последний раз редактировалось EPA; 15.03.2018 в 10:43.
EPA вне форума   Ответить с цитированием
Старый 15.03.2018, 11:58   #117
dreamwait Меню Пользователя
Вступил в клуб
 
Регистрация: 11.11.2015
Сообщений: 79
По умолчанию Re: Эмулятор брелка

Про библиотеку спасибо - забыл Компилятор гад не ругнулся - хотя в информации после компиляции отъел от епрома - нужно разобраться...
void я в примере с return убрал - чтобы значение возвращать.
В любом случае примеров достаточно - разберусь. Сейчас переношу в Протеус - давно нужно было, но как то не пользовался им... Еще нужно с дебаггером встроенным разобраться - там ведь по шагам все можно прогнать и посмотреть.
dreamwait вне форума   Ответить с цитированием
Старый 15.03.2018, 12:21   #118
EPA Меню Пользователя
Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 994
По умолчанию Re: Эмулятор брелка

Цитата:
Сообщение от dreamwait
Про библиотеку спасибо - забыл Компилятор гад не ругнулся - хотя в информации после компиляции отъел от епрома - нужно разобраться...
void я в примере с return убрал - чтобы значение возвращать.
В любом случае примеров достаточно - разберусь. Сейчас переношу в Протеус - давно нужно было, но как то не пользовался им... Еще нужно с дебаггером встроенным разобраться - там ведь по шагам все можно прогнать и посмотреть.

1. Компилятор не ругнулся, потому что он есщо не искуственный интелект, у него самосознанки нет, что юзер немного затупил. Делал бы на ассемблере вообще компилятор всё схавал бы без ошибок, ты хоть бы там член маржовый нарисовал бы ))))
2. по стандарту языка С/С++ если функция не имеет возвращаемого значения ( int, char и т.д.), то надо ставить void.
3. Для данного твоего примера в принципе деббагер нАХ не нужен, протеус в лёгкую справиться, только надо загрузить не *.hex файл прошивки, а например *.elf файл прошивки.
Тоесть он тоже по шагам прогонить алгоритм твой, выведет твои данные в виртуальный осциллограф и терминал, где ты и увидешь в живую свои данные с sendAnmotors/, а так же данные в еепром. Только учти, протеус в дупель не знает, что у тебя чудо китайской технологии и тебе надо как-то явно сэммулировать нажатие кнопки
EPA вне форума   Ответить с цитированием
Старый 19.03.2018, 11:43   #119
dreamwait Меню Пользователя
Вступил в клуб
 
Регистрация: 11.11.2015
Сообщений: 79
По умолчанию Re: Эмулятор брелка

Сделал в Протеусе (пока для тиньки) - загрузил 2 файла - для флеш и епром (про эльф не знал, что можно). Не совсем корректно симуляция идет - похоже протеус с епром не работает (рабочую версию только 7.7 нашел, может старая, может руки кривые - не сохраняет значение в епром, хотя читает оттуда) - может это и нормально, что не меняет епром.bin И есть отличие в результате выброса в протеусе и вживую - пока разбираюсь что не так - еще немного помучаю и выложу. Если выкладывать - при использовании у меня в проекте нестандартных библиотек - Ардуино нано - их нужно руками добавить "на экспорт" или они вместе с проектом "переедут"?

Добавлено через 12 минут
Про компилятор - так то должен был ругнуться - есть функция неизвестная... Есть подозрение, что совпало - и он (CVAVR и компилятор) про такую функцию знает (так как выделяет "eeprom" цветом) - проверю.

Добавлено через 8 минут
"по стандарту языка С/С++ если функция не имеет возвращаемого значения ( int, char и т.д.), то надо ставить void."
Я пытался схитрить - вызов без void, в теле return r1, r3; - т.е. возвращаем 2 значения - не взлетело.
Пока другое хочу - данные все же массивом - для единообразия - выброс то по сути кейлог - только нужно несколько значений менять.
dreamwait вне форума   Ответить с цитированием
Старый 19.03.2018, 12:14   #120
EPA Меню Пользователя
Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 994
По умолчанию Re: Эмулятор брелка

Цитата:
Сообщение от dreamwait
Сделал в Протеусе (пока для тиньки) - загрузил 2 файла - для флеш и епром (про эльф не знал, что можно). Не совсем корректно симуляция идет - похоже протеус с епром не работает (рабочую версию только 7.7 нашел, может старая, может руки кривые - не сохраняет значение в епром, хотя читает оттуда) - может это и нормально, что не меняет епром.bin И есть отличие в результате выброса в протеусе и вживую - пока разбираюсь что не так - еще немного помучаю и выложу

Работает протез с еепром причём правильно. Это у тебя лыжи не едут. Совет: скачай со всемирной помойки готовый пример работы Протеза с еепром и не мучайся



. Если выкладывать - при использовании у меня в проекте нестандартных библиотек - Ардуино нано - их нужно руками добавить "на экспорт" или они вместе с проектом "переедут"?

Сия есть великая тайна. Пробуй

Добавлено через 12 минут
Про компилятор - так то должен был ругнуться - есть функция неизвестная... Есть подозрение, что совпало - и он (CVAVR и компилятор) про такую функцию знает (так как выделяет "eeprom" цветом) - проверю.

Добавлено через 8 минут
"по стандарту языка С/С++ если функция не имеет возвращаемого значения ( int, char и т.д.), то надо ставить void."
Я пытался схитрить - вызов без void, в теле return r1, r3; - т.е. возвращаем 2 значения - не взлетело.
Пока другое хочу - данные все же массивом - для единообразия - выброс то по сути кейлог - только нужно несколько значений менять.

Такой финт с ушами не прокатит, видимо у тебя не правильное представление понятие о функции, Погугли. Особо заостри внимание внимание на ссылки, мля указатели, есть такая хрень ещё out , ref, глобальные переменные . Это один академический час , удели себе драгоценному. И тогда у тебя не будет больше на пути этой грабли.


..
EPA вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 19:33. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика