Команды CLI + Аргументы не выполняются правильно. - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю в командах CLI в моем приложении Visual Studio C #.Это приложение взаимодействует с Flash Programmer 2 (программное обеспечение Texas Instruments для загрузки микропрограммы в CC2560) с помощью CLI (интерфейс командной строки).Я проверил несколько примеров в StackOverflow, но мне не удалось реализовать решения.

Шаги моего приложения:

  • Выберите последовательный порт
  • Открыть консоль
  • выполнить srfprog.exe
  • выполнить командную строку (srfprog -t soc (COM84, CC2650) -e -p -v -fc: \ test.bin)
  • Проверить, успешно ли выполнено программирование

Myфайл находится в: D: \ Projects \ Test_Fixture \ Test_Fixture_Visual_Studio \ SmartRF Tools \ Flash Programmer 2 \ bin \ srfprog.exe Когда я выполняю это в моем CMD (windows), окно подсказки показывает enter image description here

После появления этого экрана я отправил команды для программирования чипа

srfprog -t soc (COM84, CC2650) -e -p -v -fc: \ test.bin Эта команда будет программироватьи проверьте код в микроконтроллере CC2650, как показано на скриншоте ниже:

enter image description here

Программирование идеально.Однако, когда я запускаю (Нажмите кнопку - Загрузить прошивку), мое приложение сразу открывает и закрывает окно оболочки.Как показано на рисунке ниже enter image description here

Мой код указан ниже:

    private void button2_Click(object sender, EventArgs e)
    {

        System.Diagnostics.Process CC2650 = new System.Diagnostics.Process();
        CC2650.StartInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
        CC2650.StartInfo.Arguments = "srfprog -t soc(COM84,CC2650) -e -p -v -f c:\test.bin"; //argument
        CC2650.StartInfo.UseShellExecute = false;
        CC2650.StartInfo.RedirectStandardOutput = true;
        CC2650.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        CC2650.StartInfo.CreateNoWindow = false; //not diplay a windows
        CC2650.Start();
        string output = CC2650.StandardOutput.ReadToEnd(); //The output result
        CC2650.WaitForExit();

    }

В этом тесте я использую фиксированный COM-порт.Позже я выберу порт.

Почему мое программное обеспечение падает и не загружает прошивку? Спасибо за ваше внимание и время.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Как упоминалось ранее, вам не нужно снова передавать имя программы в аргументах. Чтобы проверить, что происходит, используйте код ниже. Он будет читать выходные данные и ошибки в асинхронном подходе, чтобы мы могли анализировать выходные данные во время работы srfprog.exe. У меня здесь нет компилятора C #, поэтому я не смог протестировать этот код перед тем, как писать здесь, возможно, вам придется что-то изменить, чтобы он работал. Пожалуйста, попробуйте и дайте мне знать, что будет напечатано на вашей консоли вывода Visual Studio.

// Add "using System.Diagnostics;"
private void button2_Click(object sender, EventArgs e)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
    startInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;

    Process process = new Process();
    process.StartInfo = startInfo;
    process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.Start();
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();
    process.WaitForExit();
}

static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
{
    Console.WriteLine(outLine.Data);
}
0 голосов
/ 20 ноября 2018

Ваш код, кажется, удваивается на srfprog , включая его в аргументы. Filename определяет исполняемый файл, и Аргументы должны быть просто тем, что идет после Filename.

CC2650.StartInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";
...