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

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

Сообщение Aheir »

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

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

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

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

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

Сообщение ikarab »

L@merOk писал(а):Протеус ISIS 7.4 Professional

PROTEUS в другом разделе форума.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

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

Сообщение ARV »

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

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

Сообщение ikarab »

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


CVAVR 1.25.9 используйте.
Аватара пользователя
kupriyanov
Открыл глаза
Сообщения: 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);
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 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 не хватает открывающейся скобочки ...
Что не так я уже сотворил?
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

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

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

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

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

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

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

Сообщение DataLife »

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

Сообщение ikarab »

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

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

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

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

Сообщение DataLife »

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

Сообщение ikarab »

kupriyanov писал(а):Уважаемый tych...

Он в бане давным давно !

kupriyanov писал(а):delay_ms(200);
#asm("WDR");

В CVAVR "СОБАКА" сьрасывается в паузах.

kupriyanov писал(а):зависает

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

Сообщение ikarab »

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



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

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

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

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

Изображение
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 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


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

Сообщение ikarab »

проект компилятора и симулятора надо прицеплять ДАВНО уж !
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 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 раз.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

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

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

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

DataLife писал(а):Просто я удалил пару строчек, как оказалось, зря ...
Удачно выбрал, что удалить... :)))
Ответить

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