Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.06.2007, 21:49
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Вот что заметил:
У меня переменные обьявляются так:
Код:
|
volatile unsigned int cat,dgit,i,flag; |
Так вот, если убрать volatile то все работает как надо...
Но меня это не сильно спасает, так как тот код я использую в подпрограмме, и переменная будет храниться в оперативной памяти...
|
|
|
|
28.06.2007, 23:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
|
Чем отличается код в .lst файлах если менять это объявление? Я не очень хорошо разбираюсь в командах AVR, поэтому нужны подробности.
|
|
|
|
28.06.2007, 23:41
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Вот код с volatile, где "не работает"
Код:
|
; 409 i=0;
; 410 while(dgit›=10)
_0x51:
00028e 91a0 0162 LDS R26,_dgit
000290 91b0 0163 LDS R27,_dgit+1
000292 971a SBIW R26,10
000293 f038 BRLO _0x53
; 411 {
; 412 i++;
000294 d05a RCALL SUBOPT_0xC
; 413 dgit=dgit-50;
000295 97f2 SBIW R30,50
000296 93e0 0162 STS _dgit,R30
000298 93f0 0163 STS _dgit+1,R31
; 414 // show_v(2,'5');
; 415 }
00029a cff3 RJMP _0x51
_0x53:
; 416 xy(0,4);
00029b d017 RCALL SUBOPT_0x2
; 417 show_v(2,dgit);
00029c d060 RCALL SUBOPT_0xD
00029d 2766 CLR R22
00029e 2777 CLR R23
00029f 940e 0310 CALL __PUTPARD1
0002a1 de85 RCALL _show_v
; 418
; 419 te:
_0x54:
; 420 goto te; |
а вот код без volatile, где "работает"
Код:
|
; 408 i=0;
; 409 while(dgit›=10)
_0x51:
00028a e0ea LDI R30,LOW(10)
00028b e0f0 LDI R31,HIGH(10)
00028c 165e CP R5,R30
00028d 066f CPC R6,R31
00028e f048 BRLO _0x53
; 410 {
; 411 i++;
00028f e0e1 LDI R30,LOW(1)
000290 e0f0 LDI R31,HIGH(1)
000291 0e7e
000292 1e8f __ADDWRR 7,8,30,31
; 412 dgit=dgit-50;
000293 e3e2 LDI R30,LOW(50)
000294 e0f0 LDI R31,HIGH(50)
000295 1a5e
000296 0a6f __SUBWRR 5,6,30,31
; 413 // show_v(2,'5');
; 414 }
000297 cff2 RJMP _0x51
_0x53:
; 415 xy(0,4);
000298 d01a RCALL SUBOPT_0x2
; 416 show_v(2,dgit);
000299 e0e2 LDI R30,LOW(2)
00029a 93ea ST -Y,R30
00029b 2de5
00029c 2df6 __GETW1R 5,6
00029d 2766 CLR R22
00029e 2777 CLR R23
00029f 940e 02f8 CALL __PUTPARD1
0002a1 de85 RCALL _show_v
; 417
; 418 te:
_0x54:
; 419 goto te; |
|
|
|
|
28.06.2007, 23:51
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
То, что код рабочий, подтверждает то, что в аврстудио все работает, да и спаяная схема работает...
Как мне кажется, протеус что то путает в оперативной памяти (изменяет содержимое, где храниться переменная dgit), поэтому и заходит в этот цикл и выйти из него не может...
|
|
|
|
29.06.2007, 15:18
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
С этого скрина видно, что программа в цикл while не должна заходить, т.к. dgit=2. Но она заходит... И почему пишет что 2 переменные не в текущем блоке памяти???
-- Прилагается рисунок: --
|
|
|
|
29.06.2007, 15:30
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
И ошибка эта???
-- Прилагается рисунок: --
|
|
|
|
04.07.2007, 21:05
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
все тот же глюк
Написал програмку, которая выводит значение переменной на 3 семисегментных индикатора. Алгоритм таков:
Код:
|
i=0;
while(dgit›=100)
{
i++;
dgit=dgit-100;
}
if (i!=0)flag =1;
if (flag)out_char1(i);
i=0;
while(dgit›=10)
{
i++;
dgit=dgit-10;
}
if (i!=0)flag =1;
if (flag)out_char2(i);
i=0;
while(dgit›=1)
{
i++;
dgit=dgit-1;
}
out_char3(i); |
Функция out_charх(i) - отображение символа на индикаторе номер х.
Так вот, количество сотен выводит, а дальше заходит в цикл десятков и выйти с него не может...
И что самое интересное, если в заголовке функции
Код:
|
void cat_digit (unsigned int dgit)
{ |
переменную сделать 4 байтовую (unsigned long int dgit), то все начинает работать... Где собака зарыта? Проект прикрепляю...
Прикрепленный файл: 6379137.rar
|
|
|
|
04.07.2007, 21:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
|
Лучше прикрепи два .lst файла - один который глючит, а второй - который работает (с минимальнейшими изменениями).
|
|
|
|
04.07.2007, 21:27
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
есть...
Прикрепленный файл: 3596563.rar
|
|
|
|
05.07.2007, 21:11
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
ТЕНЬ, спасай, очень нужна помощь...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:48.
|
|