Аvrstudio/c#/песочница
26.12.2012, 15:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Boba_spb,
|
Цитата:
|
if( конец пакета RMC)
{
Prog[0]=ParsRMC;
}
if( конец пакета GGA)
|
Я не могу просто так в обработчике приема определить что за пакет, придется нагружать его пусть простым но парсингом
Но это ладно. Пытаюсь понять смысл вертушки.
У нас создается 8 процедур "ничегонеделанья" и исполняются в цикле. Ну а по приходу конца строки мы "некоторым" (каким надо) переназначаем ничегонеделанье на прописанное в нужной процедуре..
Еси я правильно понял - очень интересно, не подозревал что так можно
|
|
|
|
26.12.2012, 15:52
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
void (*Prog[CNT_PROC])(); - получается, массив указателей на процедуры (подпрограммы - привыкаю говорить правильно)
сейчас "разбор полетов" и парсинг всего что надо идет в одной процедуре..
|
Цитата:
|
|
if( (memcmp(_gnss_line[_index], "$GPRMC", 6) == 0 || memcmp(_gnss_line[_index], "$GNRMC", 6) == 0 ) && gnss_verify(_index) )
|
например. Какой будет выигрыш? Откажемся от таймера? Он все равно понадобится в будущем.
Сейчас у меня в main() полностью пусто, так нравится..
Вместо флага заведем указатель - тоже особо смысла не имеет. Но сам подход конечно хорош, что он еще может дать? какие плюсы?
Последний раз редактировалось whoim; 26.12.2012 в 15:55.
|
|
|
|
26.12.2012, 16:01
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
void (*Prog[CNT_PROC])(); - получается, массив указателей на процедуры (подпрограммы - привыкаю говорить правильно)
|
указателей на функции
|
|
|
|
26.12.2012, 16:05
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
_Артём_, подпрограммами я называю и функции и процедуры, просто первые могут возвращать значения. Значит, функция - это подпрограмма умеющая возвращать результат )
|
|
|
|
26.12.2012, 16:06
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
RTOS от DiHalt
|
Зачем такая экзотика? Не лучше ли взять что-либо более стандартное (FreeFtos, ucOs2, chibios, scmrtos ect)?
|
|
|
|
26.12.2012, 16:30
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Если чуток "вертушку" подправить, то и приоритет выполнения появится. Т.е. индекс Prog[i] будет определять приорит.
Ну, а если этого не хватит, то лучше RTOS пользовать.
Как только прибавите функций - станет труднее без параллельных процессов.
|
|
|
|
26.12.2012, 16:31
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
if( (memcmp(_gnss_line[_index], "$GPRMC", 6) == 0 || memcmp(_gnss_line[_index], "$GNRMC", 6) == 0 ) && gnss_verify(_index) )
|
Как-то не очень это - использовать memcmp в прерывании.
Обычно что-то такое делаю:
|
Код:
|
struct RmcRxData_t {
unsigned char State;
unsigned char Buf[128];
unsigned char Length;
unsigned char Received;
} RmcRxData;
const unsigned char RmcHead[]="RMC";
unsigned char RmcReceived(unsigned char new_byte)
{
switch (RmcRxData.State) {
case 0:
if (new_byte==RmcHead[RmcRxData.State]) {
RmcRxData.State++;
RmcRxData.Length=RmcRxData.State;
}
else
RmcRxData.State=0;
break;
case 3:
RmcRxData.Buf[RmcRxData.Length++];
if (new_byte==0x0D) {
RmcRxData.Received=1;
RmcRxData.State++;
}
else {
if (RmcRxData.Length›=sizeof(RmcRxData.Buf))
RmcRxData.State=0;
}
break;
case 4:
break;
}
} |
|
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
26.12.2012, 16:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от _Артём_
|
|
Зачем такая экзотика? Не лучше ли взять что-либо более стандартное (FreeFtos, ucOs2, chibios, scmrtos ect)?
|
Оно проще в разы, соответственно прошивка меньше)
|
|
|
|
26.12.2012, 16:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от Boba_spb
|
|
Как только прибавите функций - станет труднее без параллельных процессов.
|
да, скоро прийду к этому..
|
|
|
|
26.12.2012, 16:44
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Продолжаем песочницу
Есть typedef struct {} mystruct;
Есть volatile mystruct myvariable;
на extern mystruct myvariable в другом .с файле ругается (хз кто - линкер или компилятор), неизвестный тип
как "расшарить" typedef?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 00:01.
|
|