jan 0 20 марта, 2007 Опубликовано 20 марта, 2007 · Жалоба Есть вопрос к знатокам uVision (8.05). При отладке проги в Кейловском симуляторе, он упорно игнорирует включенные файлы. То есть при переходе на функцию описанную во включенном файле, в окне дизассемблера вместе с правильным ассемблерным кодом отображаются соответствующие по номеру строки из главного файла. Облазил весь uVision, но ничего не нашел. В ИАРе таких проблем не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 20 марта, 2007 Опубликовано 20 марта, 2007 · Жалоба такое может быть. т.к. на этапе работы препроцессора файлы объединяются. делайте функции в основных файлах, а в подключениях декларируете их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jan 0 26 марта, 2007 Опубликовано 26 марта, 2007 · Жалоба Н-да. Ответов обилие. :( Пришлось писать все в отдельных файлах и раздельно подключать к проекту. Сразу обнаружилась куча минусов. Если вызываетя функция и текущего файла, то сохраняются только регистры которые эта фунция использует. А если такая же из другого, то сохраняются все регистровые переменные. Поэтому оптимизация имеет печальный вид. Если бы не глючность IAR C51, то снес бы на фиг. :angry2: Вообще непонятно. Такие классные компиляторы IAR для AVR и ARM и такой отстой для C51. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimg 0 12 апреля, 2007 Опубликовано 12 апреля, 2007 · Жалоба Не очень понял вашу проблему. Лично у меня никаких проблем с этим не возникало. Правда я в 2-м делал. Вот книжечка по кейловскому компилятору, может чем поможет.c51primer.pdf Если ничего не прояснится, интересно было бы глянуть на проект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jan 0 12 апреля, 2007 Опубликовано 12 апреля, 2007 · Жалоба Не очень понял вашу проблему. Лично у меня никаких проблем с этим не возникало. Правда я в 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. Если писать все в одном файле, то в отладчике все хорошо и оптимизация работает, но получается такая помойка, что лучше пожертвовать оптимизацией. Вот такие, блин, непонятные проблемы. :blink: Глупость какая-то. В ИАРе с таким не сталкивался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Snaky 0 13 апреля, 2007 Опубликовано 13 апреля, 2007 · Жалоба Есть вопрос к знатокам uVision (8.05). При отладке проги в Кейловском симуляторе, он упорно игнорирует включенные файлы. То есть при переходе на функцию описанную во включенном файле, в окне дизассемблера вместе с правильным ассемблерным кодом отображаются соответствующие по номеру строки из главного файла. А в Project Workspace -> Source Group не забыли эти файлы с функциями добавить?? Попробуйте без оптимизатора - возможно слишком короткая функция и оптимизатор решил сделать ее inline, т.е. заменить вызов кодом самой функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 18 апреля, 2007 Опубликовано 18 апреля, 2007 · Жалоба то при проходе в симуляторе он никогда не входит в файл func_def.c и в дизассемблерном окне в качестве комментария к коду показывает Симулятор не видит таких файлов #include func_def.c но в итоге после компиляции программа работает корректно. Для того что-бы симулятор корректно работал с *.с файлом его необходимо подключить к проекту (например как в присоединненном файле). Для каждого *.с создается файл *.h (в вашем случае это будет func_def.h) в котором описываюдтся все прототипы функций и переменные используемые в теле main другого *.с файла. Например -> Файл *.h char func(char b ); -> Файл *.c char func(char b ) { b<<=1; if( b )return b;else return 1; } Файл *.h вписывается в файл main.c с помощью #include func_def.h Все достаточно просто :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Snaky 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Для того что-бы симулятор корректно работал с *.с файлом его необходимо подключить к проекту (например как в присоединненном файле). [skipped] Все достаточно просто :) Да, я именно это и имел ввиду, только вы объяснили более подробно, да еще и приписав мне чужой пост как цитату :blink: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Да, я именно это и имел ввиду, только вы объяснили более подробно, да еще и приписав мне чужой пост как цитату :blink: Было лень искать пост Ytrnj @ Mar 20 2007, 16:11 вот я его и подделал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться