Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы...

Закрытая тема
Опции темы
Непрочитано 22.08.2012, 01:58   #1
oborotnya
Прохожий
 
Регистрация: 16.03.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
oborotnya на пути к лучшему
По умолчанию Помогите разобраться c ошибкой в VisualDSP

Получаю в процессе отладки кучу сообщений типа
[Error li1080] ".\Debug\pro.doj(program):0x4d" value of Vhod-15 (=-0xf) is out of range
Referenced from 0x7d
Valid range is [0x0,0xffff]

Нашла ссылку с описание ошибки http://www.analog.com/static/importe...ors_linker.pdf, но не поняла до конца что делать.

Текст программы:

#include "def2181.h"

//---------------Çàäàåì êîíñòàíòû ñîñòîÿíèé âûõîäîâ ìèêðîêîíòðîëëåðà-------
#define PV1 b#00000000// 0000 00 Ð0
#define PV2 b#00000100// 0010 04 Ð1Í
#define PV3 b#00000110// 0110 06 Ð2Í
#define PV4 b#00001001// 1001 09 Ð2Â
#define PV5 b#00001000// 0001 08 Ð1Â

// --------------Çàäàåì êîíñòàíòû ñîñòîÿíèé âûõîäîâ ðåëå ÐÝ1-ÐÝ4-----------
#define P1 0 // 0000 00
#define P2 b#00001000// 0001 08
#define P3 b#00000010// 0100 02
#define P4 b#00001010// 0101 0A
#define P5 b#00000011// 1100 03
#define P6 b#00001011// 1101 0B
#define P7 b#00000111// 1110 07
#define P8 b#00001111// 1111 0F

.section/DM data1;
.var Vhod;
.var Vihod;
.var temp4tek=0x0000;
.var temp4pred;
.var temp1tek=8;
.var temp1pred;
.var flag;
//---------------Çàäàåì âåêòîðà ïðåðûâàíèé---------------------------------
.section/pm IVreset; //Çàïóñê ïðîãðàììû ïîñëå Reset
_reset: jump start; rti; rti; rti;
.section/pm IVirq2; //IRQ2
rti; rti; rti; rti;
.section/pm IVirql1; //IRQL1(ïî óðîâíþ)
rti; rti; rti; rti;
.section/pm IVirql0; //IRQL0(ïî óðîâíþ)
rti; rti; rti; rti;
.section/pm IVbdma; //Ïðåðûâàíèÿ BDMA
rti; rti; rti; rti;
.section/pm IVirq1; //Ïåðåäà÷à SPORT1 / IRQ1
rti; rti; rti; rti;
.section/pm IVirq0; //Ïðèåì SPORT1 / IRQ0
rti; rti; rti; rti;
.section/pm IVtimer; //Òàéìåð (åñëè òðåáóåòñÿ ïðåðûâàíèå ïî òàéìåðó)
jump Zaderzka1; rti; rti; rti;
.section/pm IVpwrdwn; //Ïîíèæåíèå ïîòðåáëÿåìîé ìîùíîñòè
rti; rti; rti; rti;

.section/pm program;
start:
AX0=0;
DM(temp4tek)=AX0;
AX0=8;
DM(temp1tek)=AX0;
//íàñòðîéêà sport0
AX0=0;///xxxxxx;///////////b#0010100000000010;///////////////////////////////////////////////////////////////////
dm(0x3ff3)=ax0; // ðåãèñòð sport0
ax0=0;
dm(0x3ff4)=ax0;
dm(0x3ff5)=ax0;
AX0=0;///xxxx/////////////////////////////////////////////////
ax0=0x0007;
dm(0x3ff7)=ax0;
dm(0x3ff=ax0;
dm(0x3ff9)=ax0;
dm(0x3ffa)=ax0;
//íàñòðîéêà sport1
ax0=0;
dm(0x3fef)=ax0;
dm(0x3ff0)=ax0;
dm(0x3ff1)=ax0;
dm(0x3ff2)=ax0;

AX0=b#0010100000000010;
imask=AX0;
ARBL:
AX0=RX0;
DM(Vhod)=AX0;
AX0=DM(temp4tek);
DM(temp4pred)=AX0;
AX0=DM(Vhod);
AR=tglbit 3 of AX0;
DM(temp4tek)=AR;
AX0=DM(temp1tek);
DM(temp1pred)=AX0;
AR=tglbit 0 of AX0;
DM(temp1tek)=AR;
AX0=DM(temp4tek);
if NE CALL Vpered;
if EQ CALL Nazad;
Vpered:
AX0=temp4pred-temp4tek;//////////////////////////
if EQ CALL Net_Perepada_R4_Vpered;
if NE CALL Perepad_R4_Vpered;
Nazad://///////////////////////////////////
AX0=temp4pred-temp4tek;
if EQ CALL Net_Perepada_R4_Nazad;
if NE CALL Perepad_R4_Nazad;
Net_Perepada_R4_Vpered:
AX0=dm(flag);
if EQ CALL Vihod_ARBL_1;
if NE CALL Vihod_ARBL_0;
Perepad_R4_Vpered:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;/////////////////////////////////
CALL Vihod_ARBL_0;
Net_Perepada_R4_Nazad:
AX0=dm(flag);
if EQ CALL Vihod_ARBL_0;
if NE CALL Vihod_ARBL_1;
Perepad_R4_Nazad:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////
CALL Vihod_ARBL_1;
Vihod_ARBL_0:
AX0=0;
CALL Cycle;
Vihod_ARBL_1:
AX0=1;
CALL Cycle;
Cycle:
AR=pass AX0;
if NE CALL RVpered;
if EQ Call RNazad;
RVpered:
AX0=Vhod-P8;
if EQ CALL r_FV;
AX0=Vhod-P6;
if EQ CALL r_B;
AX0=Vhod-P4;
if EQ CALL r_A;
AX0=Vhod-P2;
if EQ CALL r_8;
AX0=Vhod-P1;
if EQ CALL r_0V;
r_0V:
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_FV:
imask=b#0010100000000010;///////////////////////////////////
AX0=DM(PV4);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_B:
AX0=dm(flag);
if NE call Vihod_08;
AX0=DM(PV4);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_A:
AX0=temp1pred-temp1tek;
if EQ CALL Net_Perepada_R1_Vpered;
if NE CALL Perepad_R1_Vpered;
Net_Perepada_R1_Vpered:
AX0=dm(flag);
if NE call Vihod_08;
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Perepad_R1_Vpered:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////////////////
Call Vihod_08;
r_8:
imask=b#0010100000000010;/////////////////////////////////////
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;

Vihod_08:
AX0=DM(PV5);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
RNazad:
AX0=Vhod-P1;
if EQ CALL r_0N;
AX0=Vhod-P3;
if EQ CALL r_2;
AX0=Vhod-P5;
if EQ CALL r_3;
AX0=Vhod-P7;
if EQ CALL r_8;
AX0=Vhod-P8;
if EQ CALL r_0V;
r_0N:
imask=b#0010100000000010;/////////////////////////////
AX0=DM(PV3);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_2:
AX0=dm(flag);
if NE call Vihod_04;
AX0=DM(PV3);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_3:
AX0=temp1pred-temp1tek;
if EQ CALL Net_Perepada_R1_Nazad;
if NE CALL Perepad_R1_Nazad;
Vihod_04:
AX0=DM(PV2);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Net_Perepada_R1_Nazad:
AX0=dm(flag);
if NE call Vihod_04;
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Perepad_R1_Nazad:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////////
Call Vihod_04;
Zaderzka1: //ÏÐÅÐÛÂÀÍÈÅ ÎÒ ÒÀÉÌÅÐÀ
imask=b#0010100000000010;/////////////////////////////
call ARBL;
Вложения:
Тип файла: rar asd.rar (9.7 Кб, 32 просмотров)
Реклама:
oborotnya вне форума  
Сказали "Спасибо" oborotnya
warel (29.06.2019)
Непрочитано 22.08.2012, 02:53   #2
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

У Вас синтаксические ошибки, и нужно переделать весь блок
Код:
AX0=Vhod-P8;
if EQ CALL r_FV;
AX0=Vhod-P6;
if EQ CALL r_B;
AX0=Vhod-P4;
if EQ CALL r_A;
AX0=Vhod-P2;
if EQ CALL r_8;
AX0=Vhod-P1;
if EQ CALL r_0V;
Vhod - это переменная, и обращаться нужно вот так
Код:
AX0=DM(Vhod);
AY0=P8;
AR=AX0-AY0;
if EQ JUMP r_FV;
AY0=P6;
AR=AX0-AY0;
if EQ JUMP r_B;
AY0=P4;
AR=AX0-AY0;
if EQ JUMP r_A;
и так далее
И потом, вместо операции CALL (вызовов подпрограмм ), в Вашей программе везде нужно использовать переходы JUMP.

Последний раз редактировалось Yurkin2007; 22.08.2012 в 03:12.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
warel (29.06.2019)
Непрочитано 22.08.2012, 03:23   #3
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Сообщение от Yurkin2007 Посмотреть сообщение
Vhod - это переменная, и обращаться нужно вот так
Дело не только в этом, можно, ведь и отключить эту ошибку ключом линкера
-Wwarn1080, ну, а для сравнения лучше использовать XOR.
nonamedov вне форума  
Сказали "Спасибо" nonamedov
warel (29.06.2019)
Непрочитано 22.08.2012, 09:42   #4
oborotnya
Прохожий
 
Регистрация: 16.03.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
oborotnya на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Спасибо! Все заработало. А в чем разница между СALL и JUMP? Пока не исправляла, на CALL не жалуется.
oborotnya вне форума  
Сказали "Спасибо" oborotnya
warel (29.06.2019)
Непрочитано 22.08.2012, 09:54   #5
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Сообщение от oborotnya Посмотреть сообщение
А в чем разница между СALL и JUMP
Разница в том, что при переходе CALL в стеке сохраняется текущее значение программного счетчика, которое восстанавливается при выходе из подпрограммы (RTS, RTI), чего при использовании JUMP не происходит, т.е. просто переход на указанную метку.
nonamedov вне форума  
Сказали "Спасибо" nonamedov
warel (29.06.2019)
Непрочитано 24.08.2012, 21:03   #6
oborotnya
Прохожий
 
Регистрация: 16.03.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
oborotnya на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Нужно прогнать программу и посмотреть как она работает в динамике. Входные данные поступают через sport0, но генерировать их нечем. Как можно задать поток данных в программе? Массив с константами или область памяти с данными?
oborotnya вне форума  
Сказали "Спасибо" oborotnya
warel (29.06.2019)
Непрочитано 25.08.2012, 01:49   #7
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Ваша программа выполняется по кругу. Начальная метка круга есть ARBL
Код:
ARBL:
AX0=RX0;
DM(Vhod)=AX0;
.....
.....
.....
JUMP ARBL;
и первым действием программа читает RX0 - приёмный регистр SPORT0. Если хотите симулировать данные, поступающие через SPORT0, то надо заменить чтение RX0 на чтение какого-либо массива данных.
Для этого определяете массив Dummy длиной, например, 128 элементов. И вручную инициализируете 128 значений в массив.
Код:
.var/dm/circ Dummy[128];
.init Dummy: 1000, 1100, 1200, 1300, 1400, и т.д.
Затем используете, например, второй генератор адреса и настраиваете его на массив Dummy.
Код:
i2 = ^Dummy; 
l2 = %Dummy;
m2 = 1;
После этого читаете этот массив вместо данных последовательного порта SPORT0.
Код:
ARBL:
AX0=DM(i2,m2); 
DM(Vhod)=AX0;
.....
.....
JUMP ARBL;
Читаться массив Dummy будет по кругу до бесконечности. Только учтите, что процессор проходит программу очень быстро, и эти 128 точек симуляции будут проскакивать несколько тысяч раз в секунду. Для реальной проверки с подключенными реле такой способ не годится, реле просто не успеет отработать изменение входных сигналов. Можно отключить реле и проверять выходные сигналы на экране осциллографа.
Можно замедлить чтение данных из массива Dummy, например, в 1000 раз. Для этого нужно просто сначала прочитать первый элемент, затем пропускать чтение 999 раз подряд, при этом переменная Vhod неизменна, а потом переходить к следующему элементу. Заводим новую переменную Count, записываем в неё начальное значение 1 и на каждой проходе круга программы уменьшаем на 1. Как только достигли 0 - переходим на следующий элемент массива и обновляем начальное значение Count = 1000.

Код:
.var/dm/circ Dummy[128];
.init Dummy: 1000, 1100, 1200, 1300, 1400, и т.д.
.var/dm Count;
.....
i2 = ^Dummy; 
l2 = %Dummy;
m2 = 1;
AX0=1;
DM(Count)=AX0;

ARBL:
AR=DM(Count);
AR=AR-1;
DM(Count)=AR;
IF NE JUMP LAB001;

AX0=1000;
DM(Count)=AX0;
AX0=DM(i2,m2); 
DM(Vhod)=AX0;

LAB001:
.....
.....
JUMP ARBL;
Величину замедления, может не 1000, а 10000, придётся определить экспериментально.

Последний раз редактировалось Yurkin2007; 25.08.2012 в 02:16.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
warel (29.06.2019)
Непрочитано 25.08.2012, 07:43   #8
oborotnya
Прохожий
 
Регистрация: 16.03.2009
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
oborotnya на пути к лучшему
По умолчанию Re: Помогите разобраться c ошибкой в VisualDSP

Спасибо за помощь. Я пока в пошаговом режиме ошибки ищу. Потом может через ez kit lite попробую.
oborotnya вне форума  
Сказали "Спасибо" oborotnya
warel (29.06.2019)
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться sserg_ey Микроконтроллеры, АЦП, память и т.д 4 02.06.2011 10:22
Помогите разобраться stLex Микроконтроллеры, АЦП, память и т.д 2 06.04.2008 21:00
Помогите разобраться Skt Микроконтроллеры, АЦП, память и т.д 7 26.08.2005 08:23
[Решено] VisualDSP++ 3.5 zx Цифровые сигнальные процессоры 1 16.08.2005 20:23
глюки у VisualDSP++3.5 Geremy Коллекция глюков 2 10.02.2005 17:21


Часовой пояс GMT +4, время: 21:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot