[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]

Файл: 1305046921144.jpg -(21 KB, 300x335, 1305046921144.jpg)
21 No.188679  

Чии, такой быстровопрос: я пишу программу в MPLABX 2.3, на С, (знаю, что портит код, но для прототипирования сойдет). Однако один кусок, критичный ко времени, надо переписать на асм. Проблема в том, что я не могу передать сишную переменнуй асму:
if (INDF & b6) asm("incf temp1,f");
else asm("decf _temp1,f");
Переменная ранее была объявлена в теле этой процедуры, причем как volatile.
Компилятор тупо не видит оба варианта, доку на С для мплаба читал, там написан первый вариант, тут
https://www.codeproject.com/Questions/227720/inline-assembly-in-mplab
тоже первый вариант. ЧЯДНТ?
Ах да, С для pic16, если это поможет. Сейчас там temp1 += 1; но это 2 команды, хотелось бы 1.

>> No.188681  

>>188679
Слишком уж специфичный вопрос, вряд ли тебе ответят тут. По GCC я бы подсказал, а это какая-то неведомая зверушка

>> No.188682  
Файл: Screenshot_2017-01-22-17-37-41~01.png -(273 KB, 1280x720, Screenshot_2017-01-22-17-37-41~01.png)
273

Попробуй сюдa продублировать
http://410chan.org/dev/res/14160.html

Там вроде есть люди разбирающиеся в низкоуровневщине.

>> No.188685  

Спасибо и на этом. Попробую написать там, в крайнем случае регнуть на форуме микрочипа.

>> No.188688  

>>188679
Может все-таки лучше написать ассемблер в отдельном файле и вызывать его как .global функцию?
Обычно это в любой среде разработке работает лучше, чем inline ассемблер, да и понять логику в этом случае часто проще. Хотя немного боли из-за имплементаций calling convention, конечно, придется испытать.

>> No.188704  

>>188688
Там еще и боль изза объявлений областей памяти размещения кода...Да и изза 2 (2-х, Чии!) команд писать отдельный подключаемый файл...
Но не суть, все оказалочь намного проще: если надо использовать переменные в inline asm, то их надо объявлять в глобальной секции, а не локально, вот и все. Невнимательно читал описание для инлайна, в общем.
А так да, если писать целую процедуру/функцию, то лучше в отдельный файл с подключением.

>> No.188707  

>>188681
Я так понимаю, попытка скормить GCC код, написанный в Вижуальной Студии - это задача на много вечеров, так? А кто из них больше виноват в этом, Студия или GCC, кто мне гвна в жопу залил?

>> No.188708  

>>188707
Третий вариант. Хорошо написанный код собирается любым компилятором одинаково хорошо (или одинаково плохо).На моей практике адаптирование кода VC++ -> GCC немного более сложная задача, чем наоборот, потому что разработчики под Windows зачастую (не всегда!) имеют более низкую квалификацию и программируют не столько "на плюсах/на си", сколько "в визуалстудии", ничерта не понимая в том, что происходит, плюс код часто содержит какие-то виндоспецифичные мелочи. У GCC тоже куча расширений, но они как-то адекватней, что ли, и проще для понимания (и выпиливания). Хотя это может быть синдром утенка, я пользуюсь GCC еще с версии 2.x а в четвертую ветку даже кое-чего контрибьютил.
Для начала тебе может помочь приведение кода к удобоваримому виду в самой студии:
https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/
Это решит не все проблемы, но некоторые снимет.

>> No.188710  

>>188708
Ну на самом деле все проблемы снимет тыканье носом разработчика кода в то, что он пользовался багофичами. Хотя он может в ответ заставить меня не выё и поставить студию.
Но все равно спасибо, будь у меня побольше времени, я бы полез править.




[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]