И еще: сбои происходят в начале передачи, а в конце всё в порядке, а алгоритм и там и там одинаковый, значит есть какой-то внешний фактор.
Да все сходится а Вашими изысканиями, вообщем так, начинается передача, uart начинает набивать буфер символами, программа в это время занимается своими делами, прерывания асинхронны с работой программы, как я писал за один вызов uploadWorks() из буфера извлекается один символ, размер буфера 64 байта или 512 бит, там умещается символы начала передачи и небольшой фрагмент файла,в результате задержек в выполнении кода, к тому времени когда программа на читать читать символы из буфера последний уже полон и дальнейшая запись туда не возможна, устройство теряет символы причем в самом началепередачи, когда мы начнем вычитывать символы из буфера, все восстанавливается.
И ещё раз хочу обратить ваше внимание: после начала передачи контроллер ни на что не отвлекается, только принимает символы.
Да потом заметил, просто там все не так очевидно, я там вставил цикл,так понятнее.
Но, могу заметить, что я тоже исследовал эту теорию и ставил огромные задержки перед передачей каждого символа — не помогало.
я в начале тоже так делал-не помогало,
вообщем план такой
в файле upload вводим такую конструкцию
if(fff==false){
if (Serial.available() > 0)
incomingByte = getBuffer(Serial.read());
if (checkBuffer(START_MARKER)) {
clearBuffer();
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
fff=true;
}
}
а остальное заключаем в while цикл
нужно ждать START_MARKER, затем когда START_MARKER прибыл запускаем основной цикл обработки
в программе командера делаем так
WriteFile(hPort,'STR',3,Sended,nil); // сигнал устройству приготовится
Sleep(3000);//задежка ??
// */ Поехали*/
WriteFile(hPort,'FAA',3,Sended,nil) ; // начало имени файла
сначала передаем START_MARKER
заием пауза 3 сек за это время девайс должен распознать START_MARKER и войти в цикл програмирования
затем дальше,у меня вроде пока без ошибок , сейчас доделаю обновление скопом, а то все это очень долго , файл upload dв архиве , там же исходник командера на дельфи