[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Конечно лучше. То, что есть некоторые глюки, так это беда всех новых Си-компиляторв. Кстати, глюк с оверлеем DMOVLAY я довольно просто решил. Вот пример, простой Си-программы, которая прекрасно работает.
В ней используется прерывание от таймера, по которому инвертируется флаг FL0. (Если будете пробовать компилить этот файл, не забудьте подключить в проект *.ldf файл, например ADSP-2185.ldf и в строках #include нужны угловые скобки, так как в конфе они не показываются).
#include signal.h
#include misc.h
#define PmPage(x) { asm ( "PMOVLAY=" #x ";" ); }
#define DmPage(x) { asm ( "DMOVLAY=" #x ";" ); }
void InitDSP(void);
void hndlTimer (int sig);
void toggle_flag(void);
int timer_set(unsigned int tperiod, unsigned int tcount, int tscale);
unsigned int timer_off(void);
unsigned int timer_on(void);
main()
{
DmPage(0); // Set DM overlay to 0
PmPage(0); // Set PM overlay to 0
asm("AX1=I5;"); // Save I5
asm("I5=0x0d8;"); // Load in I5 adress of error
asm("AX0=0x3400;"); // Load code of DMOVLAY=0
asm("PX=0x0F;");
asm("PM(I5,M5)=AX0;"); // Save DMOVLAY=0 in adress of error
asm("I5=AX1;"); // Restore I5
InitDSP();
while (1)
{;
}
}
void InitDSP(void)
{
timer_off();
timer_set(1000,0,0);
interrupt(SIGTIMER, hndlTimer);
timer_on();
}
void hndlTimer (int sig)
{
toggle_flag();
}
void toggle_flag(void)
{
asm("toggle FL0;");
}
E-mail: info@telesys.ru