Witam
Mam następujący problem...już drugie dzień się głowię i nic... Chciałem zrobić wstawki asseblerowskie w postaci funkcji delay w AVR Stuido. Całość napisałem na podstawie informacji zawartych w manualu do WinAvr. Wszystko według mnie wydaje się poprawnie napisane, program w assemblerze kompiluje się i nie zgłasza żadnych błędów, co do samej symulacji chodzi dokładnie tak jak tego chciałem
jednak GCC cały czas wysypuje błąd:
../delay.c:28: error: invalid 'asm': operand number out of range
sprawdziłem jeszcze raz czy rejestry są poprawnie dobrane do operandów i nie znalazłem żadnego błędu...
Słyszałem że można jeszcze robić wstawki assemblerowskie w osobnym pliku i potem dodawać go do C w postaci funkcji.... aczkolwiek nie znalazłem nigdzie jak to się robi
z góry dziękuje za wszelką pomoc
poniżej fragment programu w C:
Mam następujący problem...już drugie dzień się głowię i nic... Chciałem zrobić wstawki asseblerowskie w postaci funkcji delay w AVR Stuido. Całość napisałem na podstawie informacji zawartych w manualu do WinAvr. Wszystko według mnie wydaje się poprawnie napisane, program w assemblerze kompiluje się i nie zgłasza żadnych błędów, co do samej symulacji chodzi dokładnie tak jak tego chciałem
../delay.c:28: error: invalid 'asm': operand number out of range
sprawdziłem jeszcze raz czy rejestry są poprawnie dobrane do operandów i nie znalazłem żadnego błędu...
Słyszałem że można jeszcze robić wstawki assemblerowskie w osobnym pliku i potem dodawać go do C w postaci funkcji.... aczkolwiek nie znalazłem nigdzie jak to się robi
z góry dziękuje za wszelką pomoc
poniżej fragment programu w C:
#include <avr/pgmspace.h>
void delayus8(uint8_t time)
{
asm volatile(
"\n"
"ldi %r19,time" "\n\t"
"delay_loop%=:" "\n\t"
"dec %r19" "\n\t"
"nop" "\n\t"
"nop" "\n\t"
"nop" "\n\t"
"nop" "\n\t"
"nop" "\n\t"
"nop" "\n\t"
"cpi %r19,0" "\n\t"
"brne delay_loop%=" "\n\t"
::"r"(time));
// 10*125ns=1us
}