Всем спасибо за разьяснение в особенности
haker_fox 
Возникла другая проблема! При совмещении асм-кода и Си компилятор "заоптимизировал" почти весь алгоритм Си программы, а именно:
вечный цикл
Код
while (1)
{
if (Cnt_Dl==0)
{
BufLed=pgm_read_byte (Ptabl); // ЗАГРУЗКА НОВОГО ЗНАЧЕНИЯ ТОНА
Ptabl++;
Cnt_Dl=1000;
}
}
был упрощен до:
Код
while (1)
{ if (Cnt_Dl==0)
74: 23 2b or r18, r19
76: 19 f4 brne .+6 ; 0x7e <main+0x16>
{
BufLed=pgm_read_byte (Ptabl); // ЗАГРУЗКА НОВОГО ЗНАЧЕНИЯ ТОНА
78: 84 91 lpm r24, Z+
7a: 80 93 60 00 sts 0x0060, r24
7e: ff cf rjmp .-2 ; 0x7e <main+0x16>
переменные
BufLed и
*Ptabl описаны в Си-программе как
Код
uint8_t const *Ptabl;
volatile uint8_t BufLed; // буфер для отображения оттенка
соответствующим образом обьявленны в Асме и связке h-файла:
Код
#ifdef __ASSEMBLER__
# define sreg_save r2
# define LedTne r4
# define GenCnt r16
# define Cnt_Dl_low r18
# define Cnt_Dl_hi r19
#else /* !ASSEMBLER */
#include <stdint.h>
register uint8_t LedTne asm("r4");
register uint16_t Cnt_Dl asm("r18");
#endif /* ASSEMBLER */
В чем может быть дело ?
Сообщение отредактировал MaxiMuz - Feb 15 2012, 18:03