Пример #1
0
    public static void Main(string[] arg)
    {
        Console.WriteLine(" STM8uLoader - компактный STM8 UART загрузчик/терминал v0D_27.07.2018.");
        if (arg.Length == 0)
        {
            Console.WriteLine(" Отсутствуют аргументы командной строки.");
            Console.WriteLine(" Первый аргумент (обязательный) - название файла прошивки.");
            Console.WriteLine(" Второй аргумент (не обязательный) - четыре шестнадцатеричные цифры слитно - адрес передачи управления.");
            Console.WriteLine(" Остальные аргументы игнорируются.");
            Console.ReadKey(); return;
        }
        fileName = arg[0];
        FileOpenMemorySorting fileSorted = new FileOpenMemorySorting(fileName);

        Console.WriteLine(" " + fileName);

        if (arg.Length > 1)
        {
            goAdrCmdStr  = int.Parse(arg[1], System.Globalization.NumberStyles.HexNumber);
            srtGoAddress = arg[1];
            Console.WriteLine(" Адрес передачи управления ${0:X4} из командной строки", goAdrCmdStr);
        }

        //Dumps	myDumps = new Dumps();
        Dumps.err_Msg = " OK";          Dumps.COM_port_Open();
        if (Dumps.err_Msg != " OK")
        {
            Console.WriteLine(Dumps.err_Msg); return;
        }
        Dumps.read_Key_Open();

        rvsn_byte = Dumps.Load_First_Dump(Dumps.Read_128000v0D, "Read_128000v0D");
        //rvsn_byte = Dumps.Load_First_Dump(Dumps.Reset_128000v0D, "Reset_128000v0D");


        Console.WriteLine(" FLASH из файла до сортировки");
        Dumps.Dump_To_Console(fileSorted.GetFLASHaddressByteSorted());

        Console.WriteLine(" Код загрузчика во FLASH");
        Dumps.Dump_To_Console(Dumps.Read_128k_v0D(0x8000, 8));

        Console.WriteLine(" FLASH из файла после сортировки");
        Dumps.Dumps_To_Console(Dumps.FLASH_AdrBlcsSorting_v0D(fileSorted.GetFLASHaddressByteSorted(), Dumps.Read_128k_v0D(0x8000, 8)));

        Console.WriteLine(Dumps.err_Msg);
        Console.WriteLine(" Содержимое FLASH области до записи");
        Dumps.Dump_To_Console(Dumps.Read_128k_v0D(0x8000, 64));
        Console.WriteLine(Dumps.err_Msg);

        //Dumps.Load_Dump_v0D(Dumps.WriteBlocks_FLASH_128000v0D88, "WriteBlocks_FLASH_128000v0D88");


        Console.WriteLine(" Содержимое FLASH области до записи");
        Dumps.Dump_To_Console(Dumps.Read_128k_v0D(0x8000, 64));

        Console.WriteLine(" Отправляем FLASH область на запись");
        Dumps.WriteBlocks_FLASH_128k_v0D(Dumps.FLASH_AdrBlcsSorting_v0D(fileSorted.GetFLASHaddressByteSorted(), Dumps.Read_128k_v0D(0x8000, 8)));

        Console.WriteLine(Dumps.err_Msg);

        Console.WriteLine(" Содержимое FLASH области после записи");
        Dumps.Dump_To_Console(Dumps.Read_128k_v0D(0x8000, 64));

        Console.WriteLine(" Перезагружаем устройство");
        Dumps.Load_Dump_v0D(Dumps.Reset_128000v0D, "Reset_128000v0D");



        /*
         * // проверяем целостность кода загрузчика в STM8 за исключением ячеек содержащих адреса передачи управления
         * if (rvsn_byte == 0x14) {
         *      Dumps.Compare_Equ(0x9FFE, 0x9FFF, Dumps.rev14_srtDicAdrBts(), Dumps.Read_by_Mask128000(Dumps.rev14_srtDicAdrBts()));
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Код загрузчика boot_uC в STM8 соответствует версии ${0:X2} ", rvsn_byte);
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();}// здесь есть смысл выйти из программы
         *      Dumps.Dumps_To_Console(Dumps.Read_by_Mask128000(Dumps.rev14_srtDicAdrBts()));
         *
         *      if(fileSorted.GetFLASHaddressByteSorted().Count != 0){
         *      Dumps.Compare_NoCross(0x9FFE, 0x9FFF, Dumps.rev14_srtDicAdrBt(), fileSorted.GetFLASHaddressByteSorted());
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Файл прошивки не имеет адресов во FLASH памяти, пересекающихся с кодом загрузчика ");
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();} // здесь есть смысл выйти из программы
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetFLASHaddressByteSorted());
         *      } else Console.WriteLine(" Файл прошивки не содержит адресов для записи во FLASH память");
         *
         *      if(fileSorted.GetOPTIONaddressByteSorted().Count != 0){
         *      Dumps.Compare_NoCross(0x9FFE, 0x9FFF, Dumps.rev14_srtDicAdrBt(), fileSorted.GetOPTIONaddressByteSorted());
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Файл прошивки не имеет адресов в блоке памяти OPTION Bytes, пересекающихся с кодом загрузчика ");
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();} // здесь есть смысл выйти из программы
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetOPTIONaddressByteSorted());
         *      } else Console.WriteLine(" Файл прошивки не содержит адресов для записи в блок памяти OPTION Bytes");
         * }
         * if (rvsn_byte == 0x25) {
         *      Dumps.Compare_Equ(0x4831, 0x4832, Dumps.rev25_srtDicAdrBts(), Dumps.Read_by_Mask128000(Dumps.rev25_srtDicAdrBts()));
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Код загрузчика boot_uC в STM8 соответствует версии ${0:X2} ", rvsn_byte);
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();} // здесь есть смысл выйти из программы
         *      Dumps.Dumps_To_Console(Dumps.Read_by_Mask128000(Dumps.rev25_srtDicAdrBts()));
         *
         *      if(fileSorted.GetFLASHaddressByteSorted().Count != 0){
         *      Dumps.Compare_NoCross(0x4831, 0x4832, Dumps.rev25_srtDicAdrBt(), fileSorted.GetFLASHaddressByteSorted());
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Файл прошивки не имеет адресов во FLASH памяти, пересекающихся с кодом загрузчика ");
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();} // здесь есть смысл выйти из программы
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetFLASHaddressByteSorted());
         *      } else Console.WriteLine(" Файл прошивки не содержит адресов для записи во FLASH память.");
         *
         *      if(fileSorted.GetOPTIONaddressByteSorted().Count != 0){
         *      Dumps.Compare_NoCross(0x4831, 0x4832, Dumps.rev25_srtDicAdrBt(), fileSorted.GetOPTIONaddressByteSorted());
         *      if ( Dumps.err_Msg == " OK" ) Console.WriteLine(" Файл прошивки не имеет адресов в блоке памяти OPTION Bytes, пересекающихся с кодом загрузчика ");
         *      else {Console.WriteLine(Dumps.err_Msg); Exit();} // здесь есть смысл выйти из программы
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetOPTIONaddressByteSorted());
         *      } else Console.WriteLine(" Файл прошивки не содержит адресов для записи в блок памяти OPTION Bytes.");
         *
         * }
         *      //Console.WriteLine(Dumps.err_Msg);
         *
         *
         * if(fileSorted.GetEEPROMaddressByteSorted().Count != 0){
         *      Console.WriteLine(" Файл прошивки содержит информацию для записи в EEPROM память.");
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetEEPROMaddressByteSorted());
         * } else Console.WriteLine(" Файл прошивки не содержит адресов для записи в EEPROM память.");
         *
         * if(fileSorted.GetRAMaddressByteSorted().Count != 0){
         *      Console.WriteLine(" Файл прошивки содержит информацию для записи в RAM память.");
         *      Dumps.err_Msg = " OK"; Dumps.Dump_To_Console(fileSorted.GetRAMaddressByteSorted());
         * } else Console.WriteLine(" Файл прошивки не содержит адресов для записи в RAM память.");
         *
         *
         *
         *
         *
         *
         *      if(fileSorted.GetFLASHaddressByteSorted().Count != 0){
         *      srtDic = new SortedDictionary<int, byte>(fileSorted.GetFLASHaddressByteSorted());
         *      goAdrFrmSTM8=0;
         *      foreach( KeyValuePair<int, byte> kvp in srtDic ){
         *              if(kvp.Key == 0x9FFE) goAdrFrmSTM8 = goAdrFrmSTM8 + kvp.Value<<8;
         *              if(kvp.Key == 0x9FFF) goAdrFrmSTM8 = goAdrFrmSTM8 + kvp.Value;
         *      }
         *
         *      Console.WriteLine(" Адрес передачи управления ${0:X4} в файле прошивки STM8", goAdrFrmSTM8);
         *
         *      }
         *
         *
         * //while(Dumps.key !='q'){
         *
         *
         *
         *
         *      if(fileSorted.GetFLASHaddressByteSorted().Count != 0){
         *              Console.WriteLine(" FLASH из файла до сортировки");
         *              Dumps.Dump_To_Console(fileSorted.GetFLASHaddressByteSorted());
         *
         *              if (rvsn_byte == 0x14) {
         *              Console.WriteLine(" FLASH из файла после сортировки");
         *              Dumps.Dumps_To_Console(Dumps.FLASH_AdrBlcsSorting_v14(fileSorted.GetFLASHaddressByteSorted()));
         *              Console.WriteLine(" Отправляем FLASH область на запись");
         *              Dumps.WriteBlocks_FLASH_128000(Dumps.FLASH_AdrBlcsSorting_v14(fileSorted.GetFLASHaddressByteSorted()));
         *              Console.WriteLine(Dumps.err_Msg);
         *              Console.WriteLine(" Содержимое FLASH после записи.");
         *              Dumps.Dumps_To_Console(Dumps.ReadBlocks_128000(Dumps.FLASH_AdrBlcsSorting_v14(fileSorted.GetFLASHaddressByteSorted())));
         *              Console.WriteLine(Dumps.err_Msg);
         *              }
         *              if (rvsn_byte == 0x25) {
         *              Console.WriteLine(" FLASH из файла после сортировки");
         *              Dumps.Dumps_To_Console(Dumps.FLASH_AdrBlcsSorting_v25(fileSorted.GetFLASHaddressByteSorted()));
         *              Console.WriteLine(" Отправляем FLASH область на запись");
         *              Dumps.WriteBlocks_FLASH_128000(Dumps.FLASH_AdrBlcsSorting_v25(fileSorted.GetFLASHaddressByteSorted()));
         *              Console.WriteLine(Dumps.err_Msg);
         *              Console.WriteLine(" Содержимое FLASH после записи.");
         *              Dumps.Dumps_To_Console(Dumps.ReadBlocks_128000(Dumps.FLASH_AdrBlcsSorting_v25(fileSorted.GetFLASHaddressByteSorted())));
         *              Console.WriteLine(Dumps.err_Msg);
         *              }
         *      }
         *
         *      //Console.WriteLine();
         *
         *      if(fileSorted.GetEEPROMaddressByteSorted().Count != 0){
         *              Console.WriteLine(" EEPROM из файла до сортировки");
         *              Dumps.Dump_To_Console(fileSorted.GetEEPROMaddressByteSorted());
         *              Console.WriteLine(" EEPROM из файла после сортировки");
         *              Dumps.Dumps_To_Console(Dumps.EEPROM_AdrBlcsSorting(fileSorted.GetEEPROMaddressByteSorted()));
         *              Console.WriteLine(" Отправляем EEPROM область на запись");
         *              Dumps.WriteBlocks_EEPROM_128000(Dumps.EEPROM_AdrBlcsSorting(fileSorted.GetEEPROMaddressByteSorted()));
         *              Console.WriteLine(Dumps.err_Msg);
         *              Console.WriteLine(" Содержимое EEPROM после записи.");
         *              Dumps.Dumps_To_Console(Dumps.ReadBlocks_128000(Dumps.EEPROM_AdrBlcsSorting(fileSorted.GetEEPROMaddressByteSorted())));
         *              Console.WriteLine(Dumps.err_Msg);
         *      }
         *
         *
         *      if(fileSorted.GetOPTIONaddressByteSorted().Count != 0){
         *              Console.WriteLine(" OPTION из файла до сортировки");
         *              Dumps.Dump_To_Console(fileSorted.GetOPTIONaddressByteSorted());
         *              Console.WriteLine(" OPTION из файла после сортировки");
         *              Dumps.Dump_To_Console(Dumps.OPTION_AdrBlcsSorting(rvsn_byte, fileSorted.GetOPTIONaddressByteSorted()));
         *              Console.WriteLine(" Отправляем OPTION область на запись");
         *              Dumps.WriteBytes_OPTION_128000(Dumps.OPTION_AdrBlcsSorting(rvsn_byte, fileSorted.GetOPTIONaddressByteSorted()));
         *              Console.WriteLine(Dumps.err_Msg);
         *              Console.WriteLine(" Содержимое OPTION после записи.");
         *              Dumps.Dump_To_Console(Dumps.Read_128000(0x4800, 64));
         *              Console.WriteLine(Dumps.err_Msg);
         *      }
         *
         *
         *      //Console.WriteLine();
         *
         *      if(fileSorted.GetRAMaddressByteSorted().Count != 0){
         *              //Console.WriteLine(" RAM из файла");
         *              //Dumps.Dump_To_Console(fileSorted.GetRAMaddressByteSorted());
         *              //Console.WriteLine(" Отправляем RAM область на запись");
         *              Dumps.Write_RAM_128000(fileSorted.GetRAMaddressLineSorted());
         *              Console.WriteLine(" Содержимое RAM памяти после записи");
         *              Dumps.Dumps_To_Console(Dumps.Read_by_Mask128000(fileSorted.GetRAMaddressLineSorted()));
         *              //Console.WriteLine(Dumps.err_Msg);
         *      } else Console.WriteLine(" Область RAM не найдена");
         *
         *      //Console.WriteLine();
         *
         *      //Console.WriteLine(Dumps.err_Msg);
         *
         *
         *      if(srtGoAddress != ""){
         *              Console.WriteLine(" Передаем управление прикладной программе по адресу ${0:X4} в командной строке.", goAdrCmdStr);
         *
         *       go_bytes[0] = 0xF5;	//  GO cmd команда перехода
         *       go_bytes[1] = 0x00;	//  YH не для этого метода
         *       go_bytes[2] = 0x00;	//  YL не для этого метода
         *       go_bytes[3] = (byte)(goAdrCmdStr>>8);	//  go_adrH     старший байт требуемого адреса boot_OPTION
         *       go_bytes[4] = (byte)goAdrCmdStr;	//  go_adrL     младший байт требуемого адреса boot_OPTION
         *       go_bytes[5] = 0x00;	//  cntr    размер следующего к загрузке блока
         *               Dumps.Go_Cmnd(go_bytes); // эту команду должен понимать каждый модуль
         *      } else {
         *                      srtDic = new SortedDictionary<int, byte>(Dumps.Read_128000(0x9FFE, 2));
         *                      goAdrFrmSTM8 = 0;
         *                      foreach( KeyValuePair<int, byte> kvp in srtDic ){
         *                              if(kvp.Key == 0x9FFE) goAdrFrmSTM8 = goAdrFrmSTM8 + kvp.Value<<8;
         *                              if(kvp.Key == 0x9FFF) goAdrFrmSTM8 = goAdrFrmSTM8 + kvp.Value;
         *                      }
         *                      Console.WriteLine(" Передаем управление прикладной программе по адресу ${0:X4} из STM8.", goAdrFrmSTM8);
         *               go_bytes[0] = 0xF5;	//  GO cmd команда перехода
         *               go_bytes[1] = 0x00;	//  YH не для этого метода
         *               go_bytes[2] = 0x00;	//  YL не для этого метода
         *               go_bytes[3] = (byte)(goAdrFrmSTM8>>8);	//  go_adrH     старший байт требуемого адреса boot_OPTION
         *               go_bytes[4] = (byte)goAdrFrmSTM8;;	//  go_adrL     младший байт требуемого адреса boot_OPTION
         *               go_bytes[5] = 0x00;	//  cntr    размер следующего к загрузке блока
         *                       Dumps.Go_Cmnd(go_bytes); // эту команду должен понимать каждый модуль
         *      }
         *
         *      Dumps.statusUART = "terminal";
         *      Console.Beep();
         *      Console.ForegroundColor = System.ConsoleColor.Green;
         *      Console.WriteLine(" Для передачи байта прикладной программе в шеснадцатиричном коде \n необходимо нажать последовательно две клавиши из 0...9, A...F.");
         *      Console.ForegroundColor = System.ConsoleColor.Gray;
         *
         *      while(Dumps.inCycle){
         *
         *      }
         *
         * //}
         */


        Dumps.read_Key_Close();         // останавливаем поток чтения клавиатуры
        Dumps.COM_port_Close();
        Console.ReadKey(); return;
    } // Main();
Пример #2
0
    public static void Main(string[] arg)
    {
        if (arg.Length == 0)
        {
            Console.WriteLine("Отсутствуют аргументы командной строки");
            Console.ReadKey(); return;
        }
        else
        {
            fileName = arg[0];
        }

        Console.WriteLine("Обнаружены {0} аргумент(ов) командной строки", arg.Length);

        foreach (string strArg in arg)
        {
            Console.WriteLine(strArg);
        }        //foreach
        Console.WriteLine("Загружен файл {0}", fileName);

        fileToWrite = fileName.Replace(".s19", "");
        fileToWrite = fileToWrite.Replace(".S19", "");
        fileToWrite = fileToWrite.Replace(".hex", "");
        fileToWrite = fileToWrite.Replace(".HEX", "");

        stringDump = stringDump + fileToWrite + " = { ";

        FileOpenMemorySorting fileSorted = new FileOpenMemorySorting(fileName);

        List <byte> list_Bytes = new List <byte>();

        list_Bytes.Clear();

        Console.Write("\nRAM memory:");
        foreach (KeyValuePair <long, byte> kvp in fileSorted.GetRAMaddressByteSorted())
        {
            //if(kvp.Key % 16 == 0) Console.Write("\n${0:X4} ", kvp.Key);
            if (kvp.Key % 16 == 0)
            {
                Console.Write("\n${0:X4} ", kvp.Key);
            }
            Console.Write("${0:X2} ", kvp.Value);
        }        // foreach
        Console.WriteLine("\n");


        // извлечем дамп для RAM памяти
        foreach (KeyValuePair <long, byte> kvp in fileSorted.GetAllMemoryaddressByteSorted())
        {
            list_Bytes.Add(kvp.Value);
        }                     // foreach
        list_Bytes.Reverse(); // дамп должен быть передан в обратном порядке
        byte[] bytesDump = list_Bytes.ToArray();

        for (int i = 0; i < bytesDump.Length; i++)
        {
            stringDump = stringDump + String.Format("0x{0:X2}", bytesDump[i]);
            if (i < bytesDump.Length - 1)
            {
                stringDump = stringDump + ", ";
            }
            if (i % 16 == 0)
            {
                stringDump = stringDump + "\n";
            }
        }

        stringDump = stringDump + " };\n";
        Console.WriteLine(stringDump);

        StreamWriter fstr_out;

        try {
            fstr_out = new StreamWriter(fileToWrite + ".txt");
        }
        catch (IOException exc) {
            Console.WriteLine(exc.Message);
            Console.ReadLine();
            return;
        }

        try {
            fstr_out.WriteLine(stringDump);
        }
        catch (IOException exc) {
            Console.WriteLine(exc.Message);
            Console.ReadLine();
            return;
        }

        fstr_out.Close();


        Console.ReadKey(); return;
    } // Main();