ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
248133
Xитpый Kитaeц (15.04.2011 16:44, просмотров: 13236) reZident
Вопрос к знатокам IAR 6.0 MSP430. Есть две функции a и b, b вызывается внутри a. b реализована на asm и внутри себя использует R15. Функция а использует R15 для хранения локальной переменной, и, соответственно, эта переменная портится при вызове b. Это глюк? Код примерно такой.

unsigned long b( unsigned long arg0, unsigned int arg1 )
{
    asm("MOV #32,R15");
    return arg0;
}
unsigned int a( unsigned int n, unsigned int m, unsigned int k )
{
   unsigned long r;
   ...
   r = b( n, k-n );
   if( r > 65535 )
       r = 65535;
   n = r;
   return (n >= (65535-m)) ? 65535 : n+m;  // так глюк, m приводится к long и использует R15
   return (n >= (0xFFFF-m) ? 0xFFFF : n+m; // так нормально, m приводится к unsigned int
}