Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Кажись разобрал - там, похоже, всё прямоугольно.
когда готовится строка nmeastr, из неё копировать низзя. А кто ж это заблокировал? Получается нужно два признака блокировки - один - это datardy - для того, чтоб узнать, что данные можно перегружать из nmeastr в mt2send, а второй, обзову data_tx_proceed, - для того, чтоб разрешать передачу только после копирования до начала следующей подготовки nmeastr. datardy = 1 нужно вставить в начало подготовки nmeastr. Втаком варианте могут быть "проскальзывания" посылок, но испортить данные врятли получится Типа
while(1)
{
ParseNMEA()
}
void ParseNMEA (void)
{
...
if((datardy == 0)||(data_tx_proceed==0))
{
strcpy(mt2send, nmeastr);
if(datardy == 0) data_tx_proceed=1;
}
}
И в ISR таймера шлем
void TIMER1Interrupt (void)
{
T1IR |= (1 << 0);//reset irq flag
T1TCR = 0; //stop timer. TIMER1 is enabled again at EINT2, when 1PPS comes
if(data_tx_proceed == 1)
{
Send1String(mt2send);
data_tx_proceed = 0;
}
Led2Toggle();
VICVectAddr = 0;
}
Составить ответ | Вернуться на конференцию
Ответы