Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CodevisionAVR и Proteus
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ReM37
В Proteus загружаю cof. Все работает. Но при отладке почемуто невозможно попасть в некоторые места программы т.к. там как бы нет кода. Вот как это выглядит:
http://rem-blog.net/tmp/proteus.gif
Причем в некоторых проектах пусто почти везде. От чего это зависит никак не пойму. Невозможно и сделать точку останова.
TamTam
есть 2 варианта либо ты неиспользуеш эту процедуру поэтому ее и нет в адресном пространстве, или что то еще давай весь код в студию
defunct
Код будет подключен только в том случае, когда _DEBUG_TERMINAL_IO нигде не объявлен.
Если просто тупо нужно подключить эту функцию, так сказать "из пушки" просто удалите или закоментируйте эти две строки:

#ifndef _DEBUG_TERMINAL_IO_
..
#endif

Чем это чревато, без всего кода сказать трудно..
ReM37
Цитата(TamTam @ Jan 7 2007, 11:37) *
есть 2 варианта либо ты неиспользуеш эту процедуру поэтому ее и нет в адресном пространстве, или что то еще давай весь код в студию


Это был только пример. Вот другой:

#include <mega16.h>

// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>


/* function declaration for delay_ms */
#include <delay.h>

#define EEPROM_BUS_ADDRESS 0xa0

/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* write a byte to the EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();

/* 10ms delay to complete the write operation */
delay_ms(10);
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
unsigned char i;

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// I2C Bus initialization
i2c_init();

// LCD module initialization
lcd_init(16);


/* write the byte 55h at address AAh */
eeprom_write(0xaa,0x55);

/* read the byte from address AAh */
i=eeprom_read(0xaa);

while (1)
{
// Place your code here

};
}

Вот что вижу в Proteus:
http://rem-blog.net/tmp/proteus2.gif

А если хочу посмотреть переменную i
http://rem-blog.net/tmp/proteus3.gif

И так почти всегда. Редко бывает какая нибудь переменная, которую можно посмотреть. sad.gif
Притом программа всегда работает правильно.
Alexandergb
Цитата(ReM37 @ Jan 6 2007, 21:55) *
В Proteus загружаю cof. Все работает. Но при отладке почемуто невозможно попасть в некоторые места программы т.к. там как бы нет кода. Вот как это выглядит:
http://rem-blog.net/tmp/proteus.gif
Причем в некоторых проектах пусто почти везде. От чего это зависит никак не пойму. Невозможно и сделать точку останова.


Кажется у меня похожая проблема.
Откомпилировал проект на С в среде CodeVisionAVR 3.12
Получил cof файл и загрузил его в модель Atmega16 в Proteus 7.7.
Работает вроде бы правильно, НО
когда останавливаю симулятор (пауза) и смотрю исходный код,
то вижу только файл *.С, а файлов *.h нет в выпадающем окошке Source.
Не могу перейти (F11) к функции, которая расположена в *.h.
Прошу помощи, уважаемые.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.