реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> uVision3 simulator, При отладке Keil не показывает включенные файлы
Ytrnj
сообщение Mar 20 2007, 13:11
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 21-12-06
Из: Питер
Пользователь №: 23 756



Есть вопрос к знатокам uVision (8.05).

При отладке проги в Кейловском симуляторе, он упорно игнорирует включенные файлы.
То есть при переходе на функцию описанную во включенном файле, в окне дизассемблера
вместе с правильным ассемблерным кодом
отображаются соответствующие по номеру строки из главного файла.

Облазил весь uVision, но ничего не нашел.

В ИАРе таких проблем не было.
Go to the top of the page
 
+Quote Post
vetal
сообщение Mar 20 2007, 13:15
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



такое может быть. т.к. на этапе работы препроцессора файлы объединяются.
делайте функции в основных файлах, а в подключениях декларируете их.
Go to the top of the page
 
+Quote Post
Ytrnj
сообщение Mar 26 2007, 10:52
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 21-12-06
Из: Питер
Пользователь №: 23 756



Н-да.
Ответов обилие. sad.gif
Пришлось писать все в отдельных файлах и раздельно подключать к проекту.
Сразу обнаружилась куча минусов.
Если вызываетя функция и текущего файла, то сохраняются только регистры которые
эта фунция использует. А если такая же из другого, то сохраняются все регистровые переменные.
Поэтому оптимизация имеет печальный вид.
Если бы не глючность IAR C51, то снес бы на фиг. angry.gif
Вообще непонятно.
Такие классные компиляторы IAR для AVR и ARM и такой отстой для C51.
Go to the top of the page
 
+Quote Post
DimG
сообщение Apr 12 2007, 05:16
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 4-04-06
Из: г. Омск
Пользователь №: 15 777



Не очень понял вашу проблему. Лично у меня никаких проблем с этим не возникало. Правда я в 2-м делал.
Вот книжечка по кейловскому компилятору, может чем поможет.Прикрепленный файл  c51primer.pdf ( 305.63 килобайт ) Кол-во скачиваний: 870

Если ничего не прояснится, интересно было бы глянуть на проект.
Go to the top of the page
 
+Quote Post
Ytrnj
сообщение Apr 12 2007, 12:46
Сообщение #5





Группа: Участник
Сообщений: 10
Регистрация: 21-12-06
Из: Питер
Пользователь №: 23 756



Цитата(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.
Если писать все в одном файле, то в отладчике все хорошо и оптимизация работает, но
получается такая помойка, что лучше пожертвовать оптимизацией.

Вот такие, блин, непонятные проблемы. blink.gif
Глупость какая-то.

В ИАРе с таким не сталкивался.
Go to the top of the page
 
+Quote Post
Snaky
сообщение Apr 13 2007, 05:32
Сообщение #6


Mute Beholder
***

Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754



Цитата(Ytrnj @ Mar 20 2007, 16:11) *
Есть вопрос к знатокам uVision (8.05).

При отладке проги в Кейловском симуляторе, он упорно игнорирует включенные файлы.
То есть при переходе на функцию описанную во включенном файле, в окне дизассемблера
вместе с правильным ассемблерным кодом отображаются соответствующие по номеру строки из главного файла.

А в Project Workspace -> Source Group не забыли эти файлы с функциями добавить??
Попробуйте без оптимизатора - возможно слишком короткая функция и оптимизатор решил сделать ее inline, т.е. заменить вызов кодом самой функции.


--------------------
Common sense is not so common.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 18 2007, 11:47
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Snaky @ Apr 13 2007, 06:32) *
то при проходе в симуляторе он никогда не входит в файл 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

Все достаточно просто smile.gif
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Snaky
сообщение Apr 19 2007, 06:12
Сообщение #8


Mute Beholder
***

Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754



Цитата(Kolia @ Apr 18 2007, 15:47) *
Для того что-бы симулятор корректно работал с *.с файлом его необходимо подключить к проекту (например как в присоединненном файле).
[skipped]

Все достаточно просто smile.gif

Да, я именно это и имел ввиду, только вы объяснили более подробно, да еще и приписав мне чужой пост как цитату blink.gif


--------------------
Common sense is not so common.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 19 2007, 13:20
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Snaky @ Apr 19 2007, 07:12) *
Да, я именно это и имел ввиду, только вы объяснили более подробно, да еще и приписав мне чужой пост как цитату blink.gif


biggrin.gif Было лень искать пост Ytrnj @ Mar 20 2007, 16:11 вот я его и подделал. blush.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 14:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016