Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Аvrstudio/c#/песочница

Непрочитано 21.12.2012, 18:31  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Я делаю не совсем правильно, но работает безотказно.
Переменные объявляю в тех модулях, где они впервые инициализируются. Принципиальной разницы нет. Если эта переменная глобальная в пределах этого модуля (файла .с) то никаких действий больше не делаю.
Код:
uint19_t var_1 = 123;
Если эта переменная должна быть видима из других модулей, то:
создаю заголовочный файл, скажем global.h
Код:
#ifndef _GLOBAL_H
#define _GLOBAL_H
extern uint16_t var_1;
#endif
и... включаю его во все файлы-модули проекта.
Код:
#include "global.h"
Точно так же и с функциями. Если функция "живет" внутри одного модуля, достаточно глобального в пределах модуля описания прототипа.
Код:
char MyFunc( char );

char MyFunc( char var ){
    return( var ‹‹ 2 );
}
Если вызов функции предполагается из других модулей, нужно ее прототип объявить глобально в заголовочнике global.h
Код:
extern char MyFunc( char );
Небольшая кривота в том, что появляется лишнее объявление прототипа, но оно не вызывает конфликта. Но позволяет избежать путаницы. Недостаток подобного решения, что при большом размере global.h увеличивается время препроцессинга.
Для кого это суперважно - есть другие решения, более правильные, но и более труднопонимаемые.
Реклама:
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
whoim (21.12.2012)
Непрочитано 21.12.2012, 20:11  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от TEHb Посмотреть сообщение
Почитайте книжку по C
http://wmate.ru/ebooks/dl/421/0/

сойдет?
ЗЫ как я понял, есть extern. Он, как я вначале подумал, объявляет переменную какой то глобальной.. Нет!
extern означает, что идущая после него переменная уже где то объявлена и стоит ее поискать.

То есть использую я его не там где создаю и объявляю, а там где нужно к существующей обратится..
Тогда все работает.

Но наверно пока не прочитаю книгу - не сяду дальше ничего делать. Всех с наступащим! (я про НГ а не БП)
whoim вне форума  
Непрочитано 21.12.2012, 20:13  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от ut1wpr Посмотреть сообщение
Я делаю не совсем правильно, но
во! пришел к этому же но не туда писал extern ) Спасибо!
whoim вне форума  
Непрочитано 21.12.2012, 20:55  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от whoim Посмотреть сообщение
во! пришел к этому же но не туда писал extern ) Спасибо!
Есть два модуля. В одном объявлена переменная. В другом она используется. При компиляции в модуле, где она используется, надо ее отметить как extern. Тогда в объектном коде ей не будет присвоен абсолютный адрес, а его туда подставит уже линкер на этапе сборки объектников. А самому компилятору просто будет указание, не пытаться размещать эту переменную. Она где-то есть. Как тот суслик...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
whoim (21.12.2012)
Непрочитано 23.12.2012, 00:49  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Сообщение от whoim Посмотреть сообщение
extern означает, что идущая после него переменная уже где то объявлена и стоит ее поискать.
extern - от external. Внешняя.
omercury вне форума  
Непрочитано 24.12.2012, 18:14  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию 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
		}
Казалось бы - не успевает, и происходит вызов прерывания во время вывода?
Но я установил флаг при начале работы, снял при окончании и проверял при входе в прерывание, иначе -вывод отладочного сообщения. Сообщение я не увидел.

Есть идеи, где я ошибся? "При рождении" не предлагать
whoim вне форума  
Непрочитано 24.12.2012, 18:19  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

Чё-то не вкурил.
Не успевает - что? Загнать в буфер?
omercury вне форума  
Непрочитано 24.12.2012, 18:20  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию 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
whoim вне форума  
Непрочитано 24.12.2012, 18:21  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

omercury, да я даже это уже проверил! Вывод у меня 10hz, неслабый.. Но дело не в том конечно.

А вот в чем?
whoim вне форума  
Непрочитано 24.12.2012, 18:22  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: avrstudio/c#/песочница

В буфере нечетная строка нормально, четная - с пропусками..
whoim вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Песочница по С RY723 Электроника - это просто 0 27.02.2011 14:05


Часовой пояс GMT +4, время: 19:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.