Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Инженерный раздел > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 01.11.2018, 15:57   #11
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,522
Репутация: 2099
По умолчанию

Еще раз глянул пост #6:
USART1_println ожидает строку с 0 символом. Вы ее даете без него. Остановится, когда повезет...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 01.11.2018, 16:00   #12
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Цитата:
Еще раз глянул пост #6:
USART1_println ожидает строку с 0 символом. Вы ее даете без него. Остановится, когда повезет...
с этим символом 0 в конце тоже делал все тоже самое


typedef struct{
unsigned char tel_num[5];
} telephone_ptr;

Тоже самое белиберда, проблема в другом

Пост#6 повнимательнее посмотрите вот он работает нормально
а в пост#5 даже если я подправляю переменную typedef криво работает, я говорю же что я это заметил не только с строками но и с числовыми данными они меняются сами если объявлять переменную через extern из других модулей и именно в объявленных в typedef


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

usart.h
Код:

typedef struct{
	unsigned char tel_num;
} telephone_ptr;

usart.c
Код:

//Переменная на тип из usart.h
telephone_ptr telephone;

//Функция отправки данных
void USART1_write(unsigned char data) 
{
	while (!(UCSR1A & (1<<UDRE1))); //Ожидание опустошения буфера приема
	UDR1 = data; //Начало передачи данных
}

main.c
Код:

//можно сказать ссылка на переменную из usart.c
extern telephone_ptr telephone;

//telephone_ptr telephone;

int main(void)
{
	USART1_init(207); //скорость порта 16-115200 207-9600
	telephone.tel_num= '1';
    sei();
    while (1) 
    {
		
	USART1_write(telephone.tel_num);
		
	_delay_ms(1000);
    }
}

Изображения
Тип файла: jpg Терминал.jpg (64.6 Кб, 1 просмотров)

Последний раз редактировалось Aliens_wolfs; 01.11.2018 в 16:46.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 01.11.2018, 16:49   #13
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Вопрос остается открытым, так как же правильно работать с переменными typedef объявленных в других модулях. Такую проблему я заметил в AtmelStudio7, раньше работал в cvavr такого не замечал.

Последний раз редактировалось Aliens_wolfs; 01.11.2018 в 16:54.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 01.11.2018, 16:57   #14
jillitil
Пользователь
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Адрес: DS:SI
Сообщений: 46
Репутация: 130
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Вопрос остается открытым
Так Вы и не ответили на мой предыдущий вопрос, он был не риторический. 1) Т.о. вывод – не знаете что такое переполнение буфера. Отсюда и понятно почему
Цитата:
Пост#6 повнимательнее посмотрите вот он работает нормально
Он работает, но НЕнормально.

2) Зачем включаете прерывания? Возможно одно из них портит память.
*********
Код:

typedef struct{
  unsigned char tel_num[5];
  char _control[2];   // Контрольные переменные
} telephone_ptr;

main() {
 ._control[0] = 0xAA;
 ._control[1] = 0x55;
...

После каждого вызова/работы с tel_num проверяйте _control[1] и [2]. Если изменились значит где-то накосячили и подпортили память.

П.2. Во первых в терминал Брэя включайте HEX вместо ASCII, может удивитесь сколько мусора приходит в порт. Во вторых он сильно тормознутый, для малых скоростей и нескольких слов подойдёт, выше нет.

Последний раз редактировалось jillitil; 01.11.2018 в 17:05.
jillitil вне форума   Ответить с цитированием
Старый 01.11.2018, 17:54   #15
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Цитата:
Так Вы и не ответили на мой предыдущий вопрос, он был не риторический. 1) Т.о. вывод – не знаете что такое переполнение буфера. Отсюда и понятно почему
Я буфер делаю фиксированным, он не должен переполнятся, в посте #12 я дал пример с одним символом, все тоже самое когда я ссылаюсь на тип переменных через extern , какое там может быть переполнение.

Работает отлично вот так уже в течении часа
usart.h
Код:

Код:

typedef struct{
	unsigned char tel_num;
} telephone_ptr;

usart.c
Код:
Код:

//telephone_ptr telephone;

//Функция отправки данных
void USART1_write(unsigned char data) 
{
	while (!(UCSR1A & (1<<UDRE1))); //Ожидание опустошения буфера приема
	UDR1 = data; //Начало передачи данных
}

main.c
Код:
Код:

//extern telephone_ptr telephone;

telephone_ptr telephone;

int main(void)
{
	USART1_init(207); //скорость порта 16-115200 207-9600
	telephone.tel_num= '1';
    sei();
    while (1) 
    {
		
	USART1_write(telephone.tel_num);
		
	_delay_ms(1000);
    }
}

Изображения
Тип файла: jpg Терминал.jpg (117.9 Кб, 0 просмотров)

Последний раз редактировалось Aliens_wolfs; 02.11.2018 в 10:26.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 02.11.2018, 10:08   #16
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Цитата:
После каждого вызова/работы с tel_num проверяйте _control[1] и [2]. Если изменились значит где-то накосячили и подпортили память.
Тип переменной у меня фиксированного размера, так что с памятью не может быть проблем.
Я еще раз говорю проблема в другом в обращении к типу переменных из других модулей через extern
Проверьте у себя, контроллер мой на atmega64a, пока нет возможности проверить на других.
Но для примера я выкинул все модули от туда и работаю с двумя, думал ошибка из за других модулей, но нет.

Последний раз редактировалось Aliens_wolfs; 02.11.2018 в 12:36.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 03.11.2018, 03:37   #17
jillitil
Пользователь
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Адрес: DS:SI
Сообщений: 46
Репутация: 130
По умолчанию

Выкладывайте сюда полностью нерабочий код. В целом проблема ясна, будет время на выходных глянем.
jillitil вне форума   Ответить с цитированием
Старый 06.11.2018, 10:04   #18
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Не было времени на выходных дальше с кодом заниматься вот проект, лишние модули убрал, что бы не мешали
Вложения
Тип файла: rar GSMAlarm.rar (28.2 Кб, 1 просмотров)

Последний раз редактировалось Aliens_wolfs; 06.11.2018 в 10:48.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 06.11.2018, 11:57   #19
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 858
Репутация: 435
По умолчанию

Всем спасибо кто откликнулся, нашел у себя проблему, оказывается GSM модуль влиял на USART буфер, мне нужно было отключить его при работе с терминалом для отладки на этом же USART.
На голом контроллере все нормально работает.

Последний раз редактировалось Aliens_wolfs; 06.11.2018 в 12:02.
Aliens_wolfs вне форума   Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Может ли условное форматирование взаимодействовать с глобальными переменными объявленными на самом листе RISagitov Microsoft Office Excel 8 09.11.2015 18:02
Массив:проблемы с глобальными переменными(С\С++) vitaliz Помощь студентам 2 12.01.2014 19:44
Локальные переменные сделать глобальными AnryFlame JavaScript, Ajax 1 15.04.2013 03:52
Проблема с typedef.... не виден новый тип данных! Fantom.as Общие вопросы C/C++ 3 29.11.2011 17:04
Проблема с глобальными переменными yulia PHP 4 04.11.2008 03:47


14:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru