CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Вот здесь посмотрите
http://radiokot.ru/forum/viewtopic.php?p=94719#94719
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Родился
Сообщения: 3
Зарегистрирован: Чт мар 26, 2009 23:46:46

Сообщение L@merOk »

Пишу код для ATmega8 в CodeVisionAVR Evaluation V2.04.0a
Запускаю эмуляцию в Протеус ISIS 7.4 Professional

Протеус выкидывает сообщение Time step too small и останавливает эмуляцию

Что это за шаг?
Как его увеличить?
Надоли его увеличивать?
Это значить что протеус не может проэмулировать данную ситуацию или это не корректный код, и лутше таким не прошивать МК?
Реклама
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

L@merOk писал(а):Протеус ISIS 7.4 Professional
PROTEUS в другом разделе форума.
Контактная информация:
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
Не умеешь - не берись, но не взявшись не научишься...
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Stalker46 писал(а):Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
не надо пользоваться пиратски-крякнутыми программами :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

Stalker46 писал(а):Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
CVAVR 1.25.9 используйте.
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

Уважаемый tych...

Подскажите пожалуйста как правильно использовать функцию scanf() чтобы исключить всевозможные подвисания\сбои в работе МК AVR.
Предыстория вопроса такова: разрабатывается устройство, основанное на общении мк с GSM телефоном Siemens C45. Общение в основном в формате: вопрос - ответ. при этом все просто здорово. Сбои начинаются если подается команда телефону например позвонить и не ожидается от него ответ. в последствии при следующей попытке стребовать какую либо информацию с телефона контроллер подвисает, срабатывает гав гав таймер и работа нормализуется.

цикл опроса текущего времени с телефона:

TIMSK=0x00;
.
.
.
putsf("AT+CCLK?\x0d");
i=0;
delay_ms(200);
#asm("WDR")
do {if(rx_counter!=0) scanf("%s",strtmp); if(i>4){skip++; TIMSK=0x10; return; } i++; delay_ms(50);}
while (strcmpf(strtmp, "+CCLK:"));

я попытался решить таким образом проблему присутствия в буффере старевших данных, делаю scanf() 4 раза если не добился присутствия "+CCLK:" в строке strtmp то пропускаю этот цикл опроса и инкрементирую счетчик пропусков skip.
Проблема этого куска кода всплывает например при вызове другого телефона (между этими циклами опроса времени). хотя вызов сопровождается также считыванием строки, подразумевается что в нем ответ ОК.

printf("ATD+%s;\x0d",user_number); delay_ms(200);scanf("%s",strtmp);
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Всем МЯУ! :)))
Вопросик: хотел отключить сторожевой таймер, как это написано в книжке "Микроконтроллеры АВР в радиолюбительской практике" Автора Белова.
Собственно код:

Код: Выделить всё

#define WDRF 3
#define WDCE 4
#define WDE 3

void WDT_off(void)
{
    #asm("cli");
    #asm("wdr");
    MCUSR &= ~(1<<WDRF);
    WDTCR |= (1<<WDCE) | (1<<WDE);
    WDTCR = 0x00;
    #asm("sei");
}    
Программка ругается на первую строчку данного кода, а именно на то, что не объявлено начала блока ... да и говорит, что после данного блока void не хватает открывающейся скобочки ...
Что не так я уже сотворил?
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

Мнене понятно какую строчку вы считаете первой.

Лучше проект прицепите архивом с коментами в коде.

Ваша функция может включить прерывания если они были выключены.
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

DataLife писал(а):Программка ругается на первую строчку данного кода, ...
Этот код скомпилировался без ошибок - ошибка где-то выше в тексте. Что-нибудь вроде незакрытого блока поищи там.

Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

ikarab писал(а):Мнене понятно какую строчку вы считаете первой
А, блин, точно. Ругается на строчку void WDT_off(void).
Разве это код для включения прерываний? В книге написано обратное... Да и WDT_off тогда не ясно ...
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

вот у вас включение прерываний

#asm("sei");
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

DataLife писал(а):Ругается на строчку void WDT_off(void).
Разве это код для включения прерываний?
Этот код вообще не исполняемый - он лишь объявляет дальнейший код, как тело функции WDT_off. Само объявление тела функции синтаксически верно (и, как я уже сказал, компилируется без ошибок), искать ошибку нужно выше по тексту.
А что, проект - секретный что-ли? :)))
Вымогатель припоя
Аватара пользователя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Проект ничуть не секретный... Просто просто и может показаться смешным некоторым. Ну, собственно...
ЗЫ. так как всё же выключить прерывания???
Вложения
file C.txt
Программка
(2.66 КБ) 338 скачиваний
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

kupriyanov писал(а):Уважаемый tych...
Он в бане давным давно !
kupriyanov писал(а): delay_ms(200);
#asm("WDR");
В CVAVR "СОБАКА" сьрасывается в паузах.
kupriyanov писал(а):зависает

ИМХО надо определить почему он зависает, что он в это время делает. Может ли быть зависание аппаратное - такт пропадает например от наводок телефона ...
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

DataLife писал(а): так как всё же выключить прерывания ???

Прерывания выключить - "Язык Си для AVR"

Но вы вроде таймер сторожевой пытались выключить ???

CVAVR его обычно сам выключает в начале программы - смотрте литинг - файл .lst

Вот отключение WDT - разбор кода и применение АЦП в AVR

Изображение
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Попробовал я выключить собаку кодом:

Код: Выделить всё

#asm
LDI R31,0x18
OUT WDTCR,R31
LDI R31,0x10
OUT WDTCR,R31
#endasm
Всё рано через время работы - идёт сбой... :cry:

В файл-листинге вроде бы есть отключение:

Код: Выделить всё

                 ;DISABLE WATCHDOG
000017 e1f8      	LDI  R31,0x18
000018 b7a4      	IN   R26,MCUSR
000019 7fa7      	CBR  R26,8
00001a bfa4      	OUT  MCUSR,R26
00001b bdf1      	OUT  WDTCR,R31
00001c bde1      	OUT  WDTCR,R30
Ничего не пойму ...
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

проект компилятора и симулятора надо прицеплять ДАВНО уж !
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Проблема решена! :) Просто я удалил пару строчек, как оказалось, зря ...
Строчки

Код: Выделить всё

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
перед настройкой портов. Да, и выкинул код выключения собаки, всё и так работает!)

Спасибо за помощь :)

------------

Выводы были поспешны ... Суть проблемы подробнее изложил ниже...
Последний раз редактировалось DataLife Ср апр 01, 2009 15:43:51, всего редактировалось 1 раз.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

DataLife писал(а):... так как всё же выключить прерывания???
- Во-первых - раньше речь шла не о "выключить прерывания", а о выключении собаки - что-таки нужно?
- во вторых, код в приложенном проекте и код приведенный выше - разные,
- в третьих, приложенный проект у меня скомпилировался без ошибок - о какой ошибке ты говорил?
- в четвертых, покажи-ка ту часть asm-листинга, что между "#asm("cli");" и "ACSR=0x80;"...
DataLife писал(а):Просто я удалил пару строчек, как оказалось, зря ...
Удачно выбрал, что удалить... :)))
Ответить

Вернуться в «AVR»