Цитата(редактор @ May 6 2008, 13:43)

1- Согласно дркументации Keil использует для передачи параметров и локальных переменных регистры текущего банка. Так что криминала нет.
2 - Проблема может быть в том что не закрыта строка (нет 0 в конце буфера IN_ASCII_BUFF_L).
3 - Keil иногда оптимизирует такие конструкции ( return (vv_dat=atoi(IN_ASCII_BUFF_L)); ), поэтому результат нужно смотреть не в переменной vv_dat а в регистре R7 (через него функция возвращает значение)
После командировки снова возвратился к Keil.
Конструкцию return (vv_dat=...) заменил на return (atoi(IN_ASCII_L)). Но результата это не дало. А вот закрытие строки помогло. И сейчас ввод работает нормально. Буду проверять остальное.
Но вот что интересно.
Bin_To_ASCII(old);
IN_ASCII_BUFF[0]=Rab.symv5.old_value[0];
IN_ASCII_BUFF[1]=Rab.symv5.old_value[1];
...
return (atoi(IN_ASCII_BUFF));
Работает без закрытия строки. А вот такая конструкция:
Bin_To_ASCII(old);
IN_ASCII_BUFF_L[0]=Rab.symv4[0];
IN_ASCII_BUFF_L[1]=Rab.symv4[1];
IN_ASCII_BUFF_L[2]=Rab.symv4[2];
IN_ASCII_BUFF_L[3]=Rab.symv4[3];
IN_ASCII_BUFF_L[4]='\0';
...
return (atoi(IN_ASCII_BUFF_L));
работает только с завершающим нулем.
Хотелось бы докопаться до сути, что-бы не наступать на эти "грабли" в будущем.