Помогите вывести значение регистра в монитор порта.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Я это знаю. неужели вы это не понимаете?

Какой максимальный размер числа может быть в переменной b, чтобы выражение _SFR_IO8(b) не обращалось в бред?

 

ЛОЛ. Вторая строка 100% подтверждает. что ты этого не знаешь...


Дядя, это знаешь ли из недр библиотеки вытащено, чтобы можно было через монитор, подкидывать номера регистров. фиксированное имя придется каждый раз перекомпилировать...

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Спасибо, вечером потренируюсь, по моему это то что мне нужно. Надеюсь, Вы верите в меня...)

ЛОЛ, 40 сообщений чтобы доперло, что 0xF и 15 - это одно и тоже :)

ТС, попробуй, но имхо без толку, ничего не выйдет. В строке "15" тоже два символа, а передавать и принимать ты их не умеешь


Вот и проверим попозже...

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

фиксированное имя придется каждый раз перекомпилировать...

придецца, придецца... а ты как думал? неучи и лентяи должны жить плохо, это высшая справедливость

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:
Что за тупая привычка "на слабо" брать? Нахер нужно кому-то писать примеры для ленивой жопы, которая не может в гугле набрать "arduino получить строку из serial", но лезет в низкоуровневые вещи.

Я "на слабо" ни в коем случае не беру.
я думаю то что я спрашиваю не является большим секретом там всего пара строк, нужно только сузить круг поиска
Я код составил, задачу обрисовал, проблему указал. Люди сами не по теме пишут: а зачем вам это надо, вы не понимаете куда лезите...
Хоть бы один без подсказок написал ЗАДАЧА ВЫПОЛНИМА/НЕ ВЫПОЛНИМА...
среда ардуино вообще создана чтобы каждый КИПовец прикоснулся к святому, ну и конечно под это дело платки модули бизнес...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

У меня предложение. У меня есть немного времени до отъезда в очередной отпуск. Пока жена в автобус вещи собирает, а мои электронно-слесарные проблемы уже решены или похерены ;)). (поеду на бабье лето на Селигер на моторке кататься)

ТС! Напиши точное задание,  что ты хочешь. Например так "пишу в монитор порта адрес - получаю байт по этому адресу", пишу в десятичной, восмеричной или 16-ти ричной форме, или в любой по нотации С ( 0x0a = 10 = 012 =0b1010), что конечно лучше. Для адресов портов, которые смещены в AVR на 0x20 можно еще какой префикс придумать.

Денег возьму 2000 - столько стоит бутылка приличного рома в Отдохни. Например Роберт Ватсон Демерара. Заказ размести в "Ишу Исполнителя". Я пишу с очень подробными комментариями - по ним на будущее и разберешься с задачей.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

фиксированное имя придется каждый раз перекомпилировать...

придецца, придецца... а ты как думал? неучи и лентяи должны жить плохо, это высшая справедливость


ЧЁ злой, как собака?
Дядь, ты меня плохо знаешь, я труженник ой-ой-ой какой... думаю  был бы я твоим сыном ты бы гордился...
Поизучаю, поизучаю...

sadman41
Offline
Зарегистрирован: 19.10.2016

Discover0708 пишет:

Хоть бы один без подсказок написал ЗАДАЧА ВЫПОЛНИМА/НЕ ВЫПОЛНИМА...

Практически любая задача выполнима - вопрос только в ресурсах. 

Тебе и советуют припасти побольше ресурса в соображалке через чтение обучающих материалов, 90% которых - это статейка по формированию строки из Serial. Или документации по Serial - вплоть до простейшего readStringUntil() - с этим вообще уже детсадовцы справляются.

 

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Хоть бы один без подсказок написал ЗАДАЧА ВЫПОЛНИМА/НЕ ВЫПОЛНИМА...

я написал это в самом первом сообщении. И даже рецепт предложил.

Реально тот способ по имени и то что ты сейчас вымучиваешь по адресу - практически одно и тоже.

Твоя проблема не в том, что тебе никто не помогает - а в том, что даже когда тебе помогают - у тебя не хватает знаний понять советы.

Я же не сразу начал над тобой глумится - признай? поначалу пытался давать ответы. Но ты туп как дерево и учиться не желаешь.

Спасибо, кстати. за развлекуху... :)

Discover0708
Offline
Зарегистрирован: 20.09.2020

wdrakula пишет:

У меня предложение. У меня есть немного времени до отъезда в очередной отпуск. Пока жена в автобус вещи собирает, а мои электронно-слесарные проблемы уже решены или похерены ;)). (поеду на бабье лето на Селигер на моторке кататься)

ТС! Напиши точное задание,  что ты хочешь. Например так "пишу в монитор порта адрес - получаю байт по этому адресу", пишу в десятичной, восмеричной или 16-ти ричной форме, или в любой по нотации С ( 0x0a = 10 = 012 =0b1010), что конечно лучше. Для адресов портов, которые смещены в AVR на 0x20 можно еще какой префикс придумать.

Денег возьму 2000 - столько стоит бутылка приличного рома в Отдохни. Например Роберт Ватсон Демерара. Заказ размести в "Ишу Исполнителя". Я пишу с очень подробными комментариями - по ним на будущее и разберешься с задачей.


Спасибо, не надо... лучше я отложу контроллер в сторону на денек, а вино и сам попробую... с сыром, если деньги остануться)
 Функция_SFR_IO8(x)  принимает прямой адрес регистра,как написано в мануале, я проверил на нескольких регистров портов.
сама она внутри может и работает со смещением, но мне пока это рано.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Хоть бы один без подсказок написал ЗАДАЧА ВЫПОЛНИМА/НЕ ВЫПОЛНИМА...

я написал это в самом первом сообщении. И даже рецепт предложил.

Реально тот способ по имени и то что ты сейчас вымучиваешь по адресу - практически одно и тоже.

Твоя проблема не в том, что тебе никто не помогает - а в том, что даже когда тебе помогают - у тебя не хватает знаний понять советы.

Я же не сразу начал над тобой глумится - признай? поначалу пытался давать ответы. Но ты туп как дерево и учиться не желаешь.

Спасибо, кстати. за развлекуху... :)


А...да не за что...)Всегда рад
Скандалист к вашим услугам...

Я до сих пор благодарен всем, кто направил в нужную сторону.

Идея Ваша хороша, и сказать в правду она сразу мне пришла на ум как только вы написали что после компиляции все дефайны пропадут. И я хотел, чтоб все-таки мой код можно допилить до рабочего, а не использовать сравнения строк для выбора регистров.
Но основная задача моя в этой лабораторке состоит научиться передвать через порт HEX именно , как HEX.
это пригодится для общего развития и для работы 740 семейством(сильно устаревший РЕНЕСАС) там нет оболочки , такой как монитор порта для ардуино. есть только дебаггер за 25000р, который нужен на пару раз...а самый дешевый программатор для него стоит 75000.

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

задача моя в этой лабораторке состоит научиться передвать через порт HEX именно , как HEX.

это пригодится для общего развития и для работы 740 семейством(сильно устаревший РЕНЕСАС)

идиотизм продолжается? что, неужели 60 постов недостаточно, чтобы понять, что никакому РЕНЕСАСу Хекс не нужен?

да и вообще, каждая фраза - просто перл

Цитата:
сильно устаревший РЕНЕСАС) там нет оболочки , такой как монитор порта для ардуино

если там нет монитора порта - куда ты собрался запихивать свой Хекс?

 

хммм... ты не только мало знаешь... ты еще и туповат...

кстати. ты случайно не установщик автосигнализаций и прошивальщик прошивок в ЭБУ ? - уровень знаний о окружающем мире похож... не встречал более упертых новичков, чем желающих что-то приколхозить к своему или чужому авто...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вот тебе не комментированный кусок. Адреса можно писать десятичные, восьмеричными или 16тиричными. БЕЗ СМЕЩЕНИЯ, то есть адрес DDRB = 0x24, а PINB - 0x23, а не 4 и 3.

void setup() {
   Serial.begin(115200);
}

void loop() {
  uint16_t a = 0;
  char c;
  static char buf[32];
  static byte i = 0;
  static byte addrOK = false;
  
  if (Serial.available()) {
    c = Serial.read();
    if (isalnum(c)) {
      buf[i++] = c;
      i &= 0b11111;
    }
    
    if (c == '\n') {
      addrOK = true;
      buf[i] = 0;
      i = 0;
    }
  }

  if (addrOK) {
    addrOK = false;
    a = strtol(buf,NULL,0);
    Serial.print("Byte at 0x");
    Serial.print(a,16);
    Serial.print(" is 0x");
    Serial.print(*(byte*)(a),16);
    Serial.print(" or ");
    Serial.print(*(byte*)(a),2);
    Serial.println();
  }
}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

если там нет монитора порта - куда ты собрался запихивать свой Хекс?

Кста! Это в меморизз!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ну так можно и 15 послать в терминале, это - ☼ )))
 

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

задача моя в этой лабораторке состоит научиться передвать через порт HEX именно , как HEX.

это пригодится для общего развития и для работы 740 семейством(сильно устаревший РЕНЕСАС)

идиотизм продолжается? что, неужели 60 постов недостаточно, чтобы понять, что никакому РЕНЕСАСу Хекс не нужен?

 

хммм... ты не только мало знаешь... ты еще и туповат...


А что ему нужно, Дядь?
Ну ты открой, сам почитай...чего они там пишут про программирование памяти программ
страница 80.
Там, как я понял, когда он окажется в буте, нужно через юарт отправлять команды/данные итд...

https://www.renesas.com/eu/en/document/dst/7542-group-datasheet?language...

Software Commands

Table 11 lists the software commands
Read Array Command (FF16)

Read Status Register Command (7016)

Program Command (4016)
 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Фсё! Не продолжай, умоляю, я уже пацталом! ;))

Всеё-таки жаль, что прекратили практику карательной психиатрии... нда-с.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

задача моя в этой лабораторке состоит научиться передвать через порт HEX именно , как HEX.

это пригодится для общего развития и для работы 740 семейством(сильно устаревший РЕНЕСАС)

идиотизм продолжается? что, неужели 60 постов недостаточно, чтобы понять, что никакому РЕНЕСАСу Хекс не нужен?

да и вообще, каждая фраза - просто перл

Цитата:
сильно устаревший РЕНЕСАС) там нет оболочки , такой как монитор порта для ардуино

если там нет монитора порта - куда ты собрался запихивать свой Хекс?

 

хммм... ты не только мало знаешь... ты еще и туповат...

кстати. ты случайно не установщик автосигнализаций и прошивальщик прошивок в ЭБУ ? - уровень знаний о окружающем мире похож... не встречал более упертых новичков, чем желающих что-то приколхозить к своему или чужому авто...


он самый... не поверишь, работаю с четырьмя сто, делаю добро людям.

Колхозники! монитор порта это программа, которая туда-сюда...
А UART это порт
 

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Колхозники! монитор порта это программа, которая туда-сюда...
А UART это порт
 

так чего там у ренесаса твоего нет? :) монитора или порта? :)

 

Discover0708 пишет:

Ну ты открой, сам почитай...чего они там пишут про программирование памяти программ
страница 80.
Там, как я понял, когда он окажется в буте, нужно через юарт отправлять команды/данные итд...
 

пляя я уже тоже не могу...

КАКАЯ СВЯЗЬ ЭТОГО С ТВОИМИ ОПЫТАМИ????

Что в твоем ренесасе будет принимать твои отправки в Хексе? ты бутлоадер к ренесасу собрался переписывать?? - а если нет - нахрена вся эта ветка?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Discover0708 пишет:

В стандартном примере ардуино есть пример перевода из String в int.

String.toInt() она дает возможность перевести стринг значение вида 10500 в int 10500
Покажите мне, не знающему языка С, и не прочитавшему до конца ни одного учебника, как строку вида
1А привести к ее числовому виду int.

Да точно так же с двумя небольшими отличиями:

1. Вместо множителя 10 надо использовать множитель 16. 

2. Нужно учитывать, что разница в кодах между "9" и "А" не единица, а больше.

Ну и по-хорошему, следовало бы учесть, что вместо "1А" может быть введено "1а", но если ввод будете осуществлять Вы сами, то, думаю, это не обязательно.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Колхозники! монитор порта это программа, которая туда-сюда...
А UART это порт
 

так чего у ренесаса твоего нет? :) монитора или порта? :)


Если серьезно, то нету монитора порта(оболочки). а порт uart есть.
я вот сайте ренесас написал, и человек отправил мне программу для чтения записи контроллера этой серии через юарт и был очень рад что кто то ковыряется со старьем. Этой программы на сайте ренесас нет!он даже сказал, что я соображаю в этом. мне было стыдно или не ловко..но я правду ему сказал, что мне только диодиком помигать...

Товарищи! Всем хорошего дня! Но я сюда еще вернусь...

b707
Offline
Зарегистрирован: 26.05.2017

ТС, чтобы пресечь этот балаган, подумай о простой вещи.

Похоже, ты задумал читать данные регистров из работающего контроллера, я верно понял?

так вот.

Ты не сможешь читать регистры Ренесаса выдуманным тобой способом, не стерев из него родную прошивку. А после того, как сотрешь - и читать будет просто нечего.

Понятно?

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Если серьезно, то нету монитора порта(оболочки). а порт uart есть.

опять не понимаешь

Монитор порта - это просто терминал (программа связи). Их существуют десятки - коммерческих и фришных. Мониторы, как правило,  не привязаны к конкретным чипам.

На практике это означает, что связываться с ардуино можно не только монитором из комплекта ИДЕ. а практически любым терминалом. Ровно тоже самое относится к твоему ренесасу, если там есть UART. Можно даже использовать монитор из ардуино иде .

 

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

ТС, чтобы пресечь этот балаган, подумай о простой вещи.

Похоже, ты задумал читать данные регистров из работающего контроллера, я верно понял?

так вот.

Ты не сможешь читать регистры Ренесаса выдуманным тобой способом, не стерев из него родную прошивку. А после того, как сотрешь - и читать будет просто нечего.

Понятно?


Если программа будет моя, почему не получится? Вы думаете я пытаюсь через бутлоадер регистры посмотреть? у ренесаса иде не поддерживает uart обмен через терминал, только через разные там дебаггеры, по крайней мере эта серия.

Я включу в программу  отправку нужных мне регистров на вывод в сереал, и буду читать любым монитором, которых у меня два, а Вы говорите, что даже ардуино иде это может, значит три.

sadman41
Offline
Зарегистрирован: 19.10.2016

Извините, но...

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Если программа будет моя

хе-хе... с твоими знаниями "твоя программа" к ренесасу появится лет через 15...

А так да - это возможно.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Если программа будет моя

хе-хе... с твоими знаниями "твоя программа" к ренесасу появится лет через 15...

А так да - это возможно.


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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Discover0708 пишет:

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

ты хотя бы процессор назвал над коим воюешь, а то их тысячи...
и таки да chipprog-48 их шьёт страницы с 506 по 530

Discover0708
Offline
Зарегистрирован: 20.09.2020

ua6em пишет:

Discover0708 пишет:

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

ты хотя бы процессор назвал над коим воюешь, а то их тысячи...
и таки да chipprog-48 их шьёт страницы с 506 по 530

M37542F8

К сожалению, его в этом списке нет. У меня есть chipprog+, почти то же самое. поддержка его закончилась.
BEEPROG+(ELNEC) , там он указан. Мне просто досталось несколько блоков  со всей периферией, компактные с корпусом, поэтому выбор пал именно на НЕГО.)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Discover0708 пишет:
на выходных буду пробовать.
И как?

Green
Offline
Зарегистрирован: 01.10.2015

ЕвгенийП пишет:
И как?


Отчего то вспомнился поручик.))
"Ну, что вам сказать господа... Вот вы пробовали когда нибудь кормить с руки голодную лошадь?"

Green
Offline
Зарегистрирован: 01.10.2015

sadman41 пишет:
Только, полагаю, там программисты писали в программах слова типа mov, jnz , а не for и malloc. Поэтому тогда был смысл в рассматривания содержимого регистров, а сейчас - не особо.

В самом отладчике писали, в основном, в шестнадцатеричных кодах. Писали короткие тесты или вставляли заплатки.
Только продвинутые отладчики имели дизассемблер, а особо продвинутые - даже ассемблер. И тогда можно было писать  mov, jzn и т.п.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green]</p> <p>[quote=sadman41 пишет:
было писать  mov, jzn и т.п.

видимо  jnz?

Green
Offline
Зарегистрирован: 01.10.2015

Да какая в ж. разница!)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
Discover0708
Offline
Зарегистрирован: 20.09.2020

ЕвгенийП пишет:

Discover0708 пишет:
на выходных буду пробовать.
И как?


Плохо! Прошивка закрыта 7 байтным паролем, Я надеялся, что он открыт. Его даже не стереть! либо перебор, либо в помойку.
На Habr.ru есть статья, как человек перебирал пароль с помощью отладочной платы, используя в расчете время отрицательного ответа от мк, в случае не совпадения пароля.

у меня еще появился вопрос.
Понадобилось мне сделать эмулятор одного изделия.
На первый взгляд, в КАН сообщении, оно просто выполняет перебор значений. захотел его с эмулирорвать..
заступорился на простейщей с виду задаче. я ее решил, но она громоздкая получилась.

суть задачи такая обеспечить чередование значений, чтобы в старшем ниббле байта через каждые две отправки чередовались, то нули, то единицы(08,09,1A,1B,0C,0D итд)
нужный кусочек кода привожу ниже...
Скажите пожалуйста, а лучше покажите, можно ли это написать попроще.., Спасибо.


uint8_t a=0x1f,b=1, c=0;
bool one=true,two=false;
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
}

void loop() {
 if(a<0x10){Serial.print("0");Serial.println(a,HEX);}
 else{Serial.println(a,HEX);}

 if(b){                                         //  условие обеспечивает перебор младшего ниббла и 
  a &=  0x0F;
  a +=  0x01;     
  if(a==0x10) a=0x00;
  a +=  0x10;                                   //строго добавляет единицу в старший ниббл 
  Serial.println("pervoe uslovie");
  b--;
  }
  else if(!b && one)  {                         //установка режима отправки чередования отправки 
    c=2;                                         //Например( 08,09,1A,1B,0C,0D итд)
    Serial.println("vtoroe uslovie");
    one= false;
    two=true;
  }
  if(c){                                    //условие обеспечивает перебор только младшего ниббла
    a &=  0x0F;                             
    a +=  0x01;
    if(a==0x10){a=0x00;}
    Serial.println("tretie uslovie");
    c--;
  }
    if(!c && two){b=2;
    Serial.println("chetvert uslovie");
    one=true;
    two=false;
    }
    
 delay(800);

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Цикл от min до max. Внутри доп счётчик от одного до четырёх. Если он меньше трех, то сбрасываем старший ниббл.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
счётчик от одного до четырёх. Если он меньше трех, то сбрасываем старший ниббл.

а если больше-равно - устанавливаем

b707
Offline
Зарегистрирован: 26.05.2017

ужость нах :)

вот это все

a &=  0x0F;
  a +=  0x01;     
  if(a==0x10) a=0x00;
  a +=  0x10;          

заменяется одной строкой

 a =(a++) | 0x10;          

и непонятно, нафига повторять код для if (b) и  if (c), если он почти совпадает. Еще одно условие добавте да и все

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

старший ниббл = ((число отправок++) & 0x02)<<4;

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen, у тебя только четные учитываются, а ему нужно через две итерации менять.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Согласен, ++ надо в другое место присобачить, а так то, нулевой бит меняется 2 раза, а первый - через два раза на третий.  Каоче, туь думать надо, а у мня сёдня IQ отрицательный. 

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:
Цикл от min до max. Внутри доп счётчик от одного до четырёх. Если он меньше трех, то сбрасываем старший ниббл.

Значимое упрощение! Спасибо! Возможно это не совсем то, как Вы предлагали.

for(c=0;c<4;c++){
 if(a<0x10){Serial.print("0");Serial.println(a,HEX);}
 else{Serial.println(a,HEX);}
 a &=  0x0F;
  a +=  0x01;     
  if(a==0x10) a=0x00;
  if(c==2){a &=  0x0F;  a +=  0x10;}
  if(c==3)  {a &=  0x0F;  a +=  0x10;}
 }

Я не указал сначала, что каждая отправка отправка, сама является частью жесткого цикла.
и там конечно дополнительного цикла, наверное не вложишь....
Вот основной  код. возможно ли в нем такое упрощение? В весь цикл состоит из(20 смен значения поля [2], через каждые 13 посылок, которые в свою очередь меняют старший ниббл в [3], через 2 отправки.

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
MCP2515 mcp2515(10);

uint32_t t=30;
uint8_t a=0,b=1 ,c =0,i=0;
bool one=true,two=false;
uint8_t buff[]={0x00,0x00,0x00,0x00,0x33,0x43,0x31,0x20,0x37,0x31,0x33,0x32,0x35,0x20,0x41,0x42,0x20,0x31,0x43,0x36};
void setup() {

  canMsg1.can_id  = 0x448;
  canMsg1.can_dlc = 5;
  canMsg1.data[0] = 0x82;
  canMsg1.data[1] = 0x29;
  canMsg1.data[2] = 0xFF;
  canMsg1.data[3] = 0x1F;
  canMsg1.data[4] = 0x70;
  
  SPI.begin();
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}
void loop() {
  for(i=0;i<20;i++){
  for(a=0;a<13;a++){
    mcp2515.sendMessage(&canMsg1);
    delay(t);
   
    if(a==1){canMsg1.data[2]=0x00;}
    if(a==4){canMsg1.data[2]=buff[i];}
    if(a==6){canMsg1.data[2]=0x00;}
    if(a==12){canMsg1.data[2]=0xFF;}
    
    if(b){
      b--;
      canMsg1.data[3]&=0x0F;
      canMsg1.data[3]+=0x01;
    if(canMsg1.data[3]==0x10){
      canMsg1.data[3]=0x00;}
      canMsg1.data[3]+=0x10;
      
          }
     else if(!b && one ){
            c=2;
            one= false;
            two=true;
          }
     if(c){
      c--;
      canMsg1.data[3]&=0x0F;
      canMsg1.data[3]+=0x01;     
     if(canMsg1.data[3]==0x10){
      canMsg1.data[3]=0x00;}
      
     }
      if(!c && two){
       b=2;
       one=true;
      two=false;
       }
       }
    }
    delay(t);
   
}

 

b707
Offline
Зарегистрирован: 26.05.2017

слушайте, я же вам показал выше, как преобразовать ваши действия. Ну нафига вы опять вот это вот лепите?

  a &=  0x0F;
  a +=  0x01;     
  if(a==0x10) a=0x00;
  if(c==2){a &=  0x0F;  a +=  0x10;}
  if(c==3)  {a &=  0x0F;  a +=  0x10;}

первая строка просто лишняя, две последние - одинаковые... Что ж вы очевидных преобразований не видите?

вот как это будет

if (c > 1) a=(a++) | 0x10; 
else a= (a++) | 0x0f;

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Выправлю метод Семёна + добавлю вариации:

for (uint8_t i = 0x00; 0x10 > i; i++){
       uint8_t r;
       r = i | ((i & 0x02) == 0x02) << 0x04;  
       // r = i | (!!(i & 0x02)) << 0x04;  
       // r = i | ((i & 0x03) < 0x02) << 0x04;  
       printf("%02X\n", r);   
} 

 

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

слушайте, я же вам показал выше, как преобразовать ваши действия. Ну нафига вы опять вот это вот лепите?

  a &=  0x0F;
  a +=  0x01;     
  if(a==0x10) a=0x00;
  if(c==2){a &=  0x0F;  a +=  0x10;}
  if(c==3)  {a &=  0x0F;  a +=  0x10;}

первая строка просто лишняя, две последние - одинаковые... Что ж вы очевидных преобразований не видите?

вот как это будет

if (c > 1) a=(a++) | 0x10; 
else a= (a++) | 0x0f;

 

b707, пожалуйста, не раздражайтесь!
Мне нужно осмыслить Ваш код.  я написал так,как мне понятно. И ещё указал о том, о чем не написал в самом начале.
Приведенный ниже код не работает. где моя ошибка?
 

void loop() {
 for(c=0;c<4;c++){
 if(a<0x10){Serial.print("0");Serial.println(a,HEX);}
 else{Serial.println(a,HEX);}
 if (c > 1) a=(a++) | 0x10; 
else a= (a++) | 0x0f;

 }
} 

 

b707
Offline
Зарегистрирован: 26.05.2017

сорри

вот так попробуйте

void loop() {
 for(c=0;c<4;c++){
 if(a<0x10){Serial.print("0");Serial.println(a,HEX);}
 else{Serial.println(a,HEX);}
 if (c > 1) a=(a++) | 0x10; 
else a= (a++) & 0x0f;

 }
} 

 

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

сорри

вот так попробуйте

void loop() {
 for(c=0;c<4;c++){
 if(a<0x10){Serial.print("0");Serial.println(a,HEX);}
 else{Serial.println(a,HEX);}
 if (c > 1) a=(a++) | 0x10; 
else a= (a++) & 0x0f;

 }
} 

 

процедура сложения не ведется, а так признаки появились

b707
Offline
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Плохо! Прошивка закрыта 7 байтным паролем, Я надеялся, что он открыт. Его даже не стереть! либо перебор, либо в помойку.
На Habr.ru есть статья, как человек перебирал пароль с помощью отладочной платы, используя в расчете время отрицательного ответа от мк, в случае не совпадения пароля.

вы ничего не путаете? Кто-то пытался подобрать 7-мибайтный пароль? вы представляете. сколько это вариантов?

Может 7ми битный?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Discover0708 пишет:

Плохо! Прошивка закрыта 7 байтным паролем, Я надеялся, что он открыт. Его даже не стереть! либо перебор, либо в помойку.
На Habr.ru есть статья, как человек перебирал пароль с помощью отладочной платы, используя в расчете время отрицательного ответа от мк, в случае не совпадения пароля.

вы ничего не путаете? Кто-то пытался подобрать 7-мибайтный пароль? вы представляете. сколько это вариантов?

Может 7ми битный?

он ничего не путает, мало того подобрал )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нет, речь шла именно о 7-байтном. Идея как раз в том, чтобы подбирать байт за байтом (по одному). Т.е. вариантов всего 256*7=1792.