Цитата(DimG @ Apr 12 2007, 06:16)

Не очень понял вашу проблему. Лично у меня никаких проблем с этим не возникало. Правда я в 2-м делал.
За книжечку - спасибо.
А проблема, что во 2-ом, что в 3-ем, следующая.
Касается встроенного симулятора.
Если основной файл содержит следующее:
Код
//-------------------------------------------------------
#include "func_def.c"
void main(void)
{char i=1;
do{
i = func( i );
} while( i );
}
//-----------------------------------------------
а файл
func_def.cКод
char func(char b )
{
b<<=1;
if( b )return b;else return 1;
}
//-----------------------------------------------
то при проходе в симуляторе он никогда не входит в файл
func_def.cи в дизассемблерном окне в качестве комментария к коду показывает
строки из основного файла которые к этому коду отношения не имеют
искал как это пофиксить, но увы.
Сейчас приходится
func_def.c вместо
#include включать в проект, а функцию объявлять как
externв основном файле. Тогда отладчике все
Ок, НО перед вызовом таких функций компилятор
запихивает все переменные из регистров в память и вся регистровая оптимизация накрывается,
так как на этапе компиляции неизвестно какие регистры портит функция, а портить она
имеет право все регистры включая
DPTR.
Если писать все в одном файле, то в отладчике все хорошо и оптимизация работает, но
получается такая помойка, что лучше пожертвовать оптимизацией.
Вот такие, блин, непонятные проблемы.
Глупость какая-то.
В ИАРе с таким не сталкивался.