Proteus ошибки во время отладки
08.02.2012, 22:50
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Proteus ошибки во время отладки
При отладке нахожу немало ошибок работы протеуса.
Вот пример одной из ошибок.
Есть простенькая программка :
|
Код:
|
#include ‹avr/io.h›
#include ‹avr/eeprom.h›
struct summa
{
uint8_t temp1;
uint8_t temp2;
uint8_t temp3;
uint8_t temp4;
};
struct summa temp_sum;
EEMEM struct summa proba1;
//main
int main(void)
{
eeprom_read_block(&temp_sum, &proba1, 4);
temp_sum.temp1 = 1;
temp_sum.temp2 = 2;
temp_sum.temp3 = 3;
temp_sum.temp4 = 4;
eeprom_write_block(&temp_sum, &proba1, 4);
while (1)
{
temp_sum.temp3 = temp_sum.temp3 + 1;
}
} |
Первая неточность:

Выполнили eeprom_read_block(&temp_sum, &proba1, 4);
в окне переменных видно, что уже залезли на proba1.temp1
это ладно.
Но при записи уже видна ошибка:

четвертый байт не был записан.
Выкладываю весь проект at16eeprom.rar
попробуйте у себя.
А вопрос в том, вы при работе с программой тоже замечаете похожие ошибки?
Заинтересованы ли авторы программы в информации об ошибках.
Последний раз редактировалось CodeNameHawk; 08.02.2012 в 23:39.
|
|
|
|
09.02.2012, 23:14
|
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,693
Сказал спасибо: 28
Сказали Спасибо 4,526 раз(а) в 956 сообщении(ях)
|
Re: Proteus ошибки во время отладки
Что то тут у вас не так. Как то коряво. Времени на детальную разборку нет, но похоже опять чужие шишки сыпятся на голову Протеуса.
Как у вас с языком, владеете? Ну, в смысле, не марки на конверты наклеивать... Попробуйте разгрести сами, а в качестве подспорья есть вот такой, довольно "свежий" документик (англ).
|
|
|
|
Сказали "Спасибо" Halex07
|
|
|
09.02.2012, 23:36
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Proteus ошибки во время отладки
|
Цитата:
|
|
но похоже опять чужие шишки сыпятся на голову Протеуса.
|
Даже если учесть, что приведенный код прекрасно работает в железе да и отладка в AVR studio идет на ура?
|
|
|
|
09.02.2012, 23:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
|
Re: Proteus ошибки во время отладки
eeprom_write_block(&proba1, &temp_sum, 4);
Вроде так надо, судя по выложенному выше мануалу
|
|
|
|
09.02.2012, 23:51
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Proteus ошибки во время отладки
|
Цитата:
|
|
При отладке нахожу немало ошибок работы протеуса.
|
Практически все подобные "открытия" выливались в не компетенцию заявителя.
Сообщение от CodeNameHawk
|
|
Даже если учесть, что приведенный код прекрасно работает в железе да и отладка в AVR studio идет на ура?
|
Да ? А как быть с этим ????
|
PHP код:
|
void eeprom_read_block (void *pointer_ram , const void *pointer_eeprom , size_t n)
void eeprom_write_block (void *pointer_eeprom , const void *pointer_ram , size_t n)
|
__________________
Осторожно , злой кот
|
|
|
|
09.02.2012, 23:54
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Proteus ошибки во время отладки
Нет, не так.
|
Цитата:
|
void eeprom_write_block ( const void * __src,
void * __dst,
size_t __n
)
Write a block of __n bytes to EEPROM address __dst from __src.
|
По умному
|
Код:
|
eeprom_read_block((void*)&temp_sum, (const void*)&proba1, 4);
eeprom_write_block((const void*)&temp_sum, (void*)&proba1, 4); |
типа так.
p.s. Это я отвечал на вопрос выше, но он подошел и на ваш вопрос.
Последний раз редактировалось CodeNameHawk; 09.02.2012 в 23:57.
|
|
|
|
10.02.2012, 00:03
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
|
Re: Proteus ошибки во время отладки
значит какой-то из мануалов ошибается. Перекомпильте - и узнаем какой именно. Лениво ставить студию.
ЗЫ: я не задавал вопрос
|
|
|
|
10.02.2012, 00:06
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Proteus ошибки во время отладки
Сообщение от Ara41
|
значит какой-то из мануалов ошибается. Перекомпильте - и узнаем какой именно. Лениво ставить студию.
ЗЫ: я не задавал вопрос
|
После перекомпиляции ничего не поменялось.
Сообщение от dosikus
|
Да ? А как быть с этим ????
PHP код:
void eeprom_read_block (void *pointer_ram , const void *pointer_eeprom , size_t n)
void eeprom_write_block (void *pointer_eeprom , const void *pointer_ram , size_t n)
|
Здесь все как в мануале,(как и у меня в программе) не вижу никаких различий.
Последний раз редактировалось CodeNameHawk; 10.02.2012 в 01:25.
|
|
|
|
10.02.2012, 00:57
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Proteus ошибки во время отладки
Сообщение от dosikus
|
|
Практически все подобные "открытия" выливались в не компетенцию заявителя.
|
Из последних ошибок. (есть и другие ошибки)
|
Код:
|
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
ISR(TIMER0_COMP_vect)
{
PORTA |= 1‹‹PA0;
TCCR0 = 0; //stop timer0
}
ISR(TIMER0_OVF_vect)
{
PORTA |= 1‹‹PA1;
TCCR0 = 0; //stop timer0
}
//main
int main(void)
{
DDRA = 0xFF;
TIMSK |= 1 ‹‹ OCIE0 | 1 ‹‹ TOIE0; //compare timer0 i overlov
OCR0 = 235; //ustanovka nachalnogo znachenija OCR0 == 235
TCNT0 = 215; //ustanovka nachalnogo znachenija taimera0 == 215
sei();
TCCR0 = 1 ‹‹ CS00; //zapustit timer0 clk_io/1
while (1)
{
}
} |
В протеусе первой происходит прерывание TIMER0_OVF_vect, хотя обязанно быть TIMER0_COMP_vect.
(Тут уточню, что это обязанно быть, если атмеловцы не ошиблись в своей студии и в готовых процессорах.)
И как всегда, уважая время других, код проекта
at16_comp.rar
Последний раз редактировалось CodeNameHawk; 10.02.2012 в 01:14.
|
|
|
|
10.02.2012, 07:54
|
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,693
Сказал спасибо: 28
Сказали Спасибо 4,526 раз(а) в 956 сообщении(ях)
|
Re: Proteus ошибки во время отладки
Сообщение от CodeNameHawk
|
|
Даже если учесть, что приведенный код прекрасно работает в железе да и отладка в AVR studio идет на ура?
|
Насчет "железа" отвечу так:
-В железе и молоток - выпрямляющий девайс. Попробуйте спаять выпрямительный мостик из молотков.
Ну почему, стоит только в чем-то усомниться, сразу поднимают вой про "железо". Только недавно по соседству была "разборка" по поводу ASM библы для HD44780 с Easy Electronics Итог этого разбирательства здесь..
А ведь тоже у автора в железе шло "на ура", а в Протеусе выяснилось, что два операнда явно переставлены местами. А ведь это низкоуровневый ASM, а не Си, в котором после нас компилятор черт его знает по чьему мановению (ну точнее создателя) может поставить все с ног на голову.
А засомневался я как раз по второму поводу, что ваш пример, перекомпилированный в АВР студии в связке с Протеусом идет "на ура" (скриншот). А поскольку я знаю, что WinAVR от версиик версии может здорово отличаться (из-за чего видно и засомневался Ara41 - в старых версиях SOURCE и DESTINATION во write_block были как у него) я и предложил попробовать вам разобраться самому. У меня просто полный цейтнот и посидеть подольше над отладкой некогда.
ЗЫ! Все, понял в чем собака порылась. Пока сидел, ждал подъезжающую машину, успел еще раз заглянуть в ваш пример. Вы, в частности, в скриншоте 2 не учли "причуды" анимации ISIS. Я об этом писал в FAQ. Ваша картинка содержимого EEPROM соответствует предыдущему кадру анимации, т.е. байт по адресу 0x03 не попал в этот кадр. Делаем еще шаг кнопкой STEP внизу слева - переходим в следующий кадр и он уже равен 04, как и положено. А если зайти в Configure Diagnostic (фиолетовый жучара) и для Меги включить опцию Debug для EEPROM Module, то в логе будут подробно расписаны все операции с EEPROM и время их выполнения. Об этом как раз я готовлю сейчас следующий материал в FAQ. Надо научить и остальных пользоваться возможностями отладки.
Последний раз редактировалось Halex07; 10.02.2012 в 08:49.
Причина: добавлен посскриптум
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:24.
|
|