Easyelectronics.ru

Электроника для всех
Текущее время: 20 ноя 2019, 07:47

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: non-reentrant и чего с этим делать
СообщениеДобавлено: 14 окт 2019, 11:34 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 192
Попал проект на поддержку, перевел его на XC8, остались ворнинги non-reentrant.
Насколько я понял, одна из особенностей Hi и микрочиповских компиляторов - они не умеют использовать функцию И в прерывании И в главном цикле.

Может кто нибудь прокомментировать это поведение? Оно обходиться? Вариант завернуть функцию в другую?
На С18 использовал static переменные в некоторых функциях и вроде работало. Сейчас вроде тоже работает, получается, функции пусть и разные, используют один адрес переменных?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: non-reentrant и чего с этим делать
СообщениеДобавлено: 14 окт 2019, 12:06 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2367
А МК какой? В мануале на XC8 вот что написано:
Вложение:
Screenshot_20191014_100439.png
Screenshot_20191014_100439.png [ 249.17 Кб | Просмотров: 668 ]

В MPLAB в опциях проекта->настройки компилятора можно сменить модель стека. Но соотв. это только для Enhanced midrange и PIC18 прохляет. Ну или у функций можно указывать классификатор __reentrant, как в мануале написано. Но для baseline и просто midrange это не прохляет.

PS: А киньте целиком ворнинг.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: non-reentrant и чего с этим делать
СообщениеДобавлено: 14 окт 2019, 12:16 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2367
Вот еще, особенно последние 2 абзаца:
Вложение:
Screenshot_20191014_101315.png
Screenshot_20191014_101315.png [ 193.31 Кб | Просмотров: 665 ]

Соб-но по умолчанию в MPLAB проекты создаются с ключиком компилятора, который врубает Compiled тип стека, который в свою очередь по-умолчанию генерит non-reentrant функции (в связи с моделью стека, передачи аргументов функций). Если вызов функций идет из нескольких call graph, коими и создаются функциями прерываний, т.е. когда функция non-reentrant вызывается из основного кода и из прерывания - это может привести к проблемам. Поэтому компилятор дублирует код функции. Одна вызывается из основного кода, копия из прерывания. Об этом и ворнинг как я понимаю у вас. Проблема только в дубликации - затраты флеша и озу. Можно либо забить, если ресурсов хватает, либо перевести функции на software stack модель, если железка поддерживается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: non-reentrant и чего с этим делать
СообщениеДобавлено: 14 окт 2019, 19:19 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 192
NStorm писал(а):
Вот еще, особенно последние 2 абзаца:
Вложение:
Screenshot_20191014_101315.png

Соб-но по умолчанию в MPLAB проекты создаются с ключиком компилятора, который врубает Compiled тип стека, который в свою очередь по-умолчанию генерит non-reentrant функции (в связи с моделью стека, передачи аргументов функций). Если вызов функций идет из нескольких call graph, коими и создаются функциями прерываний, т.е. когда функция non-reentrant вызывается из основного кода и из прерывания - это может привести к проблемам. Поэтому компилятор дублирует код функции. Одна вызывается из основного кода, копия из прерывания. Об этом и ворнинг как я понимаю у вас. Проблема только в дубликации - затраты флеша и озу. Можно либо забить, если ресурсов хватает, либо перевести функции на software stack модель, если железка поддерживается.


PIC18 у меня, помогли, спасибо.
Но по ОЗУ\ПЗУ не сильно ситуация изменилась, даже в абсолютных кол-вах. Можно сказать вообще не изменилась.
Но хотя бы ворнинги ушли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: non-reentrant и чего с этим делать
СообщениеДобавлено: 14 окт 2019, 21:19 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2367
Да там много нюансов может быть. В мануале от XC8 можно посмотреть, в тех секциях, откуда я скрины привел есть еще на тему. В т.ч. про то, где в выхлопе компилятора смотреть какую модель и где он стал использовать. Ну это если интересно дальше копаться. Компилятор конечно своеобразный, но мануал у них толковый.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB