Аvrstudio/c#/песочница
21.12.2012, 18:31
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: avrstudio/c#/песочница
Я делаю не совсем правильно, но работает безотказно.
Переменные объявляю в тех модулях, где они впервые инициализируются. Принципиальной разницы нет. Если эта переменная глобальная в пределах этого модуля (файла .с) то никаких действий больше не делаю.
|
Код:
|
uint19_t var_1 = 123; |
Если эта переменная должна быть видима из других модулей, то:
создаю заголовочный файл, скажем global.h
|
Код:
|
#ifndef _GLOBAL_H
#define _GLOBAL_H
extern uint16_t var_1;
#endif |
и... включаю его во все файлы-модули проекта.
Точно так же и с функциями. Если функция "живет" внутри одного модуля, достаточно глобального в пределах модуля описания прототипа.
|
Код:
|
char MyFunc( char );
char MyFunc( char var ){
return( var ‹‹ 2 );
} |
Если вызов функции предполагается из других модулей, нужно ее прототип объявить глобально в заголовочнике global.h
|
Код:
|
extern char MyFunc( char ); |
Небольшая кривота в том, что появляется лишнее объявление прототипа, но оно не вызывает конфликта. Но позволяет избежать путаницы. Недостаток подобного решения, что при большом размере global.h увеличивается время препроцессинга.
Для кого это суперважно - есть другие решения, более правильные, но и более труднопонимаемые.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
21.12.2012, 20:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от TEHb
|
|
Почитайте книжку по C
|
http://wmate.ru/ebooks/dl/421/0/
сойдет?
ЗЫ как я понял, есть extern. Он, как я вначале подумал, объявляет переменную какой то глобальной.. Нет!
extern означает, что идущая после него переменная уже где то объявлена и стоит ее поискать.
То есть использую я его не там где создаю и объявляю, а там где нужно к существующей обратится..
Тогда все работает.
Но наверно пока не прочитаю книгу - не сяду дальше ничего делать. Всех с наступащим! (я про НГ а не БП)
|
|
|
|
21.12.2012, 20:13
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от ut1wpr
|
|
Я делаю не совсем правильно, но
|
во! пришел к этому же но не туда писал extern ) Спасибо!
|
|
|
|
21.12.2012, 20:55
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от whoim
|
|
во! пришел к этому же но не туда писал extern ) Спасибо!
|
Есть два модуля. В одном объявлена переменная. В другом она используется. При компиляции в модуле, где она используется, надо ее отметить как extern. Тогда в объектном коде ей не будет присвоен абсолютный адрес, а его туда подставит уже линкер на этапе сборки объектников. А самому компилятору просто будет указание, не пытаться размещать эту переменную. Она где-то есть. Как тот суслик...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
23.12.2012, 00:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: avrstudio/c#/песочница
Сообщение от whoim
|
|
extern означает, что идущая после него переменная уже где то объявлена и стоит ее поискать.
|
extern - от external. Внешняя.
|
|
|
|
24.12.2012, 18:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
Еще один вопрос имеется, относительно посылок в UART, которые надо отслеживать и по \r\n обрабатывать.. (парсить)
переменные
|
Код:
|
volatile char_line[200]; //line from UART ended 0x00
volatile uint8_t_pos; //position on parsing line on RX |
Есть прерывание
|
Код:
|
ISR(USARTC1_RXC_vect)
{ |
Пробуем так
|
Код:
|
uint8_t _char = _read_byte();
RS485_send_byte(_char); |
Все работает. Пример ввода и тут же вывода:
|
Код:
|
$GPGGA,140445.000,4503.6841,N,03856.8243,E,1,15,0. 75,37.2,M,22.7,M,,*57
$GPRMC,140445.000,A,4503.6841,N,03856.8243,E,0.04, 206.71,241212,,,A*62 |
Как видите, GPS-модуль.
Пробуем загонять в буфер пока не встретится \r\n и обрабатывать (выводить)
|
Код:
|
if(_char == 0x0A) //символ окончания строки
{
_line[_pos+1] = 0x00; //EOF
//отладка
RS485_send_str(_line); // \r\n уже есть в строке
_pos = 0; //обнуляем счетчик
}
else
{
_line[_pos] =_char;
_pos++; //increment counter
} |
Казалось бы - не успевает, и происходит вызов прерывания во время вывода?
Но я установил флаг при начале работы, снял при окончании и проверял при входе в прерывание, иначе -вывод отладочного сообщения. Сообщение я не увидел.
Есть идеи, где я ошибся? "При рождении" не предлагать
|
|
|
|
24.12.2012, 18:19
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: avrstudio/c#/песочница
Чё-то не вкурил.
Не успевает - что? Загнать в буфер?
|
|
|
|
24.12.2012, 18:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
На самом деле я пробовал обрабатывать в промежутке между $ и *, игнорить в остальных случаях.. То есть флаг разрешал если символ $ и запрещал по *, до (пардон) сраки все.. В выводе - хлам
|
Код:
|
$G41212,,,A*63
0$GPGGA,142027.000,4503.6887,N,03856.8232,E,1,12,0 .89,-3.6,M,22.7,M,,*43
$G41212,,,A*63
0$GPGGA,142028.000,4503.6895,N,03856.8216,E,1,12,0 .89,-8.8,M,22.7,M,,*4C
$G41212,,,A*6B
0$GPGGA,142029.000,4503.6905,N,03856.8228,E,1,12,0 .89,9.1,M,22.7,M,,*6D |
|
|
|
|
24.12.2012, 18:21
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
omercury, да я даже это уже проверил! Вывод у меня 10hz, неслабый.. Но дело не в том конечно.
А вот в чем?
|
|
|
|
24.12.2012, 18:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: avrstudio/c#/песочница
В буфере нечетная строка нормально, четная - с пропусками..
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Песочница по С
|
RY723 |
Электроника - это просто |
0 |
27.02.2011 14:05 |
Часовой пояс GMT +4, время: 19:12.
|
|