Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 10:15

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

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

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

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


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

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

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

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


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

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

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


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

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 198
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
Сообщения: 3047
Да там много нюансов может быть. В мануале от XC8 можно посмотреть, в тех секциях, откуда я скрины привел есть еще на тему. В т.ч. про то, где в выхлопе компилятора смотреть какую модель и где он стал использовать. Ну это если интересно дальше копаться. Компилятор конечно своеобразный, но мануал у них толковый.


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


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


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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