Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приведение типов данных
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
kolisnichenko_r
Здравствуйте
Открываю на ПК файл *.hex (ПО пытаюсь писать на Visual Studio С++ ):
Код
unsigned char read_boot_file[max_n];
void OpenReadFile(void)
       {unsigned int i;
        String^ s;
    StreamReader ^sr = File::OpenText(openFileDialog1->FileName);
        String^ in = sr->ReadToEnd();
        this->textBoxHex->AppendText(in);
        len_hex_file=in->Length;
        for(i = 0; i < in->Length; i++)
         {
          read_boot_file[i] = in[i];
         }
        sr->Close();
       }

Далее выбираю из read_boot_file[i] данные для прошивки в МК и их отправляю в МК. Они записываются но не в том формате котором должны быть.
Содержимое *.hex файла: blink_vd.hex

Содержимое *.bin файла из МК: firmware.bin

Содержимое *.bin файла который сгенерирован компилятором: blink_vd.bin

Какое нужно приведение типа сделать?
ViKo
Вы свой файл в строки преобразовали. А надо в двоичном виде посылать.
А писать надо "приведение", "компилятор".
kolisnichenko_r
Цитата(ViKo @ Mar 16 2016, 10:32) *
Вы свой файл в строки преобразовали. А надо в двоичном виде посылать.
А писать надо "приведение", "компилятор".

Это я подправлю, спасибо.
То есть, нужно char преобразовать в двоичный вид. Поищу как это делается.
Спасибо.
mvek
Цитата(ViKo @ Mar 16 2016, 07:32) *
Вы свой файл в строки преобразовали


А писать надо "у вас формируется файл в формате Intel Standard/Extended.Так что или настройте на формирование бинарного файла, или же парсируйте на стороне МК"
kolisnichenko_r
Применил следующий алгоритм:
Код
//Первый символ
          if (read_boot_file[nb_hex] >= '0' && read_boot_file[nb_hex] <= '9')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - '0');}
          if (read_boot_file[nb_hex] >= 'A' && read_boot_file[nb_hex] <= 'F')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - 'A' + 10); }
          if (read_boot_file[nb_hex] >= 'a' && read_boot_file[nb_hex] <= 'f')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - 'a' + 10); } //*/
          
          if(nb_hex>((30+9)*(nb_hex_j+1)+(4+2)*nb_hex_j))//4*nb_hex_j:39  82  121 //(4+1)*nb_hex_j):39  83  127 //(4+2)*nb_hex_j):39  84  129
           {nb_hex=nb_hex+9+4+1;                                    //54  96  134
            nb_hex_j++;                                             // 1   2    3
           }
            else{nb_hex++;}
//Второй символ
          if (read_boot_file[nb_hex] >= '0' && read_boot_file[nb_hex] <= '9')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - '0'); }
          if (read_boot_file[nb_hex] >= 'A' && read_boot_file[nb_hex] <= 'F')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - 'A' + 10); }
          if (read_boot_file[nb_hex] >= 'a' && read_boot_file[nb_hex] <= 'f')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - 'a' + 10); } //*/

Теперь содержимое одинаково, но где-то теряется (не те записываются): из одного делается 2 символа после 1021. С этим я надеюсь, разберусь
kolisnichenko_r
Чтение Flash (МК LPC1549) в режиме ISP по CAN интерфейсу кто-то делал?
Защита от чтения не установлена.
Порядок следующий:
1) Задание адреса Fash для считывания: 0x0
Посылка: 23 10 50 00 00 00 00 00
Ответ: 60 10 50 00 00 00 00 00
2) Задание количества байт для считывания: len_write_flash - для пробы 1024
Посылка: 23 11 50 00 00 04 00 00
Ответ: 60 11 50 00 00 00 00 00
3) Чтение Flash-памяти из МК
Посылка: 21 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00
4) Блочное считывание с МК - выгрузка SDO сегмента
Посылка: 60 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
Посылка: 70 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
Посылка: 60 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
И так 1024 раза...
Может кто сталкивался?
Пробовал начинать читать с любых адресов FLASH, RAM - ответ тот же.
mdmitry
Посмотрите утилиты srecord. Код открытый, работает с разными типами файлов.
kolisnichenko_r
Цитата(mdmitry @ Mar 16 2016, 18:33) *
Посмотрите утилиты srecord. Код открытый, работает с разными типами файлов.

Интересные утилиты, спасибо.

Цитата(kolisnichenko_r @ Mar 16 2016, 14:47) *
3) Чтение Flash-памяти из МК
Посылка: 21 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00

Нашел на сайте NXP. Не правильно записан один байт в п.3:
3) Чтение Flash-памяти из МК
Посылка: 40 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.