Аvrstudio/c#/песочница
26.12.2012, 14:03
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
Я extern переменную вижу из прерывания таймера, но НЕ вижу из main()
почему?
|
Что значит не вижу? Отладчик или компилятор не видит?
|
|
|
|
26.12.2012, 14:05
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
Boba_spb, да должно.. посмотрим
Тут проблема опять нарисовалась)
Я extern переменную вижу из прерывания таймера, но НЕ вижу из main()
почему?
|
Видно ли определение переменной, как extern в модуле main?
Определение extern должно быть видно во всех модулях, где применяется эта переменная.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
26.12.2012, 14:08
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Boba_spb, если переместить блок с проверкой переменной (if(flag==1) в функцию (главного модуля) то все работает. Изменение переменной где то далеко отлавливается.
Если переместить в этом же файле в main while(1) то он не ругается, но и не срабатывает - видимо, автоматом создает новую переменную.
Переменная объявлена "где то там" как volatile uint8_t flag и подключена к главному .c файлу как extern uint8_t flag;
Вопрос перетек плавно в немного другую плоскость. Как бы мне замутить свое прерывание?
Я ставлю некий "флаг" что мгновенно вызывает срабатывание моего вектора. Таймер на минимально возможное значение? Неохота..
Надо чтобы вызов некой "процедуры обработки" происходил не из прерывания по приходу в uart. Там я только переключаю работу на другой буфер (меняю индекс массива) и ставлю флаг, чтобы предыдущий буфер проработать.
|
|
|
|
26.12.2012, 14:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от ut1wpr
|
Видно ли определение переменной, как extern в модуле main?
Определение extern должно быть видно во всех модулях, где применяется эта переменная.
|
ну естественно, я прописываю extern uint8_t flag; прямо в main перед проверкой. Изначально она была прописана так же в extern.h который подключаю первым делом.
|
|
|
|
26.12.2012, 14:41
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
в общем, поднял вери фаст таймер (даже не считая толком его) в котором проверяю флаг, заработало..
|
|
|
|
26.12.2012, 14:45
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
вопрос - реально ли есть нужда объявлять переменную volatile, если она объявлена в заголовке файла (не в функциях/процедурах) для того чтобы сделать ее глобальной, неумираемой и использовать из других модулей через extern?
|
|
|
|
26.12.2012, 14:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Первый успех
|
Код:
|
ISR(USARTC1_RXC_vect)
{
_gnss_line[_gnss_index][_gnss_pos] = GNSS_read_byte(); //read byte from uart
//RS485_send_byte(_gnss_line[_gnss_index][_gnss_pos]);
if(_gnss_line[_gnss_index][_gnss_pos] == '\r') //if end of line
{
_gnss_line[_gnss_index][_gnss_pos] = 0x00; //EOF
_gnss_pos = 0;
if(_gnss_index == 0) _gnss_index = 1; else _gnss_index = 0;
gnss_flags |= PIN6_bm; //set flag to start parcing
}
else
{
if(_gnss_line[_gnss_index][_gnss_pos] != '\n') //\n нам не нужен
_gnss_pos++;
}
} |
Как видите, тут для буфера строк, пришедших через USART используется
_gnss_line[2][80] двухмерный массив. По признаку окончания строки я меняю индекс и ставлю флаг "есть чо делать", который отлавливается в быстром таймере и сбрасывается, запуская обработку.
Признак окончания строки - \r. Следующий за ним \n надо проигнорить, что пока у меня делается через жопо )
Сдается мне - написано некрасиво ) Посоветуете как красивее и проще оформить?
|
|
|
|
26.12.2012, 15:13
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
На RTOS Вас сподвигнуть ?
Боюсь напугаетесь.
Попробуйте такой вариант - может Вам облегчит жизнь.
Вложения:
 |
22.txt (700 байт, 45 просмотров) |
|
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
26.12.2012, 15:13
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от whoim
|
|
вопрос - реально ли есть нужда объявлять переменную volatile, если она объявлена в заголовке файла (не в функциях/процедурах) для того чтобы сделать ее глобальной, неумираемой и использовать из других модулей через extern?
|
Важно не то как объявлена переменная, а где и как она используется. И объявлена она должна быть соответственно.
Если переменная используется в прерываниях и основной программе, то
используется volatile.
|
Код:
|
extern volatile uint8_t Var; // в h-файле |
|
Код:
|
volatile uint8_t Var; // в с-файле |
Последний раз редактировалось _Артём_; 26.12.2012 в 15:54.
|
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
26.12.2012, 15:35
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Аvrstudio/c#/песочница
Сообщение от Boba_spb
|
|
Боюсь напугаетесь.
|
зубов боятся.. RTOS от DiHalt первым делом либой закинул в проект, но пока не подключал и не тыкал..
Вариант смотрю, спасибо!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 12:07.
|
|