136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
1 | |
Использование ASM в проектах на Си05.09.2014, 19:51. Показов 4550. Ответов 17
Метки нет (Все метки)
Привет народ. Прочел тут статейку об использовании ассемблера в языках высокого уровня (http://microsin.net/programmin... -code.html ) и заинтересовала меня там строчка "Есть два метода встроить код ассемблера в программу на C. Один метод - прямое встраивание операторов ассемблера в код C. ... Второй метод - написать код ассемблера в отдельном файле и скомпилировать его отдельно в объектный код, а затем присоединить (link) объектный код к основной программе на этапе линковки.". Так вот. Объясните пожалуйста подробнее - как это скомпилировать отдельно asm код а потом его залинковать к си-коду, а, что не менее важно - можно ли получить такой объектный код с помощью Algorithm Builder?
Добавлено через 18 часов 35 минут Модератор, перекинь тему, пожалуйста, в раздел "микроконтроллеры" может там кто знает.
0
|
05.09.2014, 19:51 | |
Ответы с готовыми решениями:
17
Использование gsl в проектах Использование интерфейсов в своих проектах Использование окна в двух проектах Использование стандартных ActiveX в HTML-проектах |
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
05.09.2014, 22:01 [ТС] | 3 |
Ну просто если он будет "вверху", а не "в глубине" больше шансов что его увидят А про то, что он интересный или нет - это не важно, главное чтобы не тупой
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
06.09.2014, 23:14 | 4 |
ТС, ну написано же как делать. Вы включаете в проект файл *.asm, он компилится и затем функции из него линкуются вместе с сишными кусками. Чтобы сишная программа "увидела" асмовские вставки, необходимо объявить их типа external void foo(void); ну, или с параметрами и возвращаемым значением. Как именно должны называться функции в сях и файлах *.asm - написано в вашем IDE и ДШ компилятора/линкера.
ЗЫ: основной "загвоздкой" является передача параметров. В вашем случае (Avr Studio, использующий стандартный подход) они передаются в стеке. Но есть и другие варианты. Попробуйте, и у вас все получится. На конкретные вопросы будут конкретные ответы. ЗЫ2: написание ассемблерных вставок интересно тогда, когда вообще нет передачи параметров. Имхо, это настолько много занимает места в коде, что эта передача занимает 30-40% от всех полезностей. Поэтому, если уж и писать прогу на асме, то делать это полностью.
0
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
07.09.2014, 08:52 [ТС] | 5 |
Хорошо что тема зашевелилась
И всёже не ясно. Что значит включить .asm в проект? Это, имеете ввиду, вынести весь асм код в отдельный файл? Но всё не так просто - нужно заключить код в функцию и её вызывать потом, что суть "первый метод" - обычная asm-вставка. А там, во "втором методе" говорилось, что клеить можно откомпиленный файл, по видимому уже с расширением .obj. Это и важно, вы же видите контекст моей проблемы - я хочу вклеивать куски, написанные на Algorithm Buildere.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
07.09.2014, 13:58 | 6 |
Видим мы всё, поэтому Вам и написал уважаемый Voland_
Когда Вы передаёте один, два параметра(не помню ограничение у GCC), то можно "протолкнуть" их через регистры, вот статья по этому поводу:
http://embedderslife.wordpress... asm-and-c/, но если параметров много и они не влезают в выделенные для передачи регистры, то тут читать Voland_ ЗЫ2. ЗЫ3: Не знаю как GCC, но IAR for AVR видя ассемблерную вставку в виде модуля(Ваш второй способ) насильно отключает сишный оптимизатор (печалька).
1
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
08.09.2014, 14:34 [ТС] | 7 |
Я жажду продолжения темы - мне досихпор ничего не ясно
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
08.09.2014, 17:57 | 8 |
Что не понятно? Если нужна пошаговая инструкция как подключить из Algorithm Buildere obj файл в проект на СИ, то скорей всего не найдете (если только автор Algorithm Buildere не удосужится сделать) ибо мешать в проект написанном на СИ не понятно что, чревато получением трудно обнаружимых багав. Тут бы так заработало.
Чисто из академического интереса может кто и возьмется, но точно не я. Добавлено через 3 часа 4 минуты Вот нарисовал ассемблерную вставку с передачей двух параметров
1
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
08.09.2014, 18:10 [ТС] | 9 |
Спасибо конеш за инструкцию по передаче параметров в асм файл, но, во-первых тут всё слишком упрощено - нет у асемблерной функции тегов, говорящих компилятору какие регистры там используются, а значит будут проблемы с оптимизацией С-кода, а во-вторых, конешно, хотелось бы узнать про запиливание асм-блоков на этапе линковки, а не компиляции. Но еще раз спасибо и за это
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
08.09.2014, 19:31 | 10 |
Таки Voland_ и я с этого и начали дискуссию
Сделать так можно, но это на порядок геморройни. Вам придется ручками писать make файл, писали когда нибудь? Соглашение о вызовах функций в Билдере сможете соблюсти? P.S. Полазил сегодня по интернету лучше чем показанный мною способ не нашел. P.S.S Не проще, потратить время на более глубокое изучение СИ, чем нетрадиционно использовать GCC с устаревшей и не поддерживаемой средой коей является Algorithm Builder.
0
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
08.09.2014, 20:28 [ТС] | 11 |
Ну просто AB обладает всей функциональностью ASM'a, но на порядок удобнее. Даже скажу больше. Если бы сейчас исчезли бы все либы на си, я бы писал только на AB.
0
|
Витальич
|
08.09.2014, 22:44
#12
|
Не по теме: Я тоже начинал с асма и куда я скатился? Буржуйский СИ, демократические мэковские языки, скрипты на FireBird хотя последнее вещь даже очень православная.
0
|
08.09.2014, 23:03 | 13 |
Можно скомпилировать программу в hex или bin, потом дизассемблировать, получить листинг, поправить его и подключить к Си проекту. Если проект в AB не сложный, то такой вариант возможен. Это можно назвать прототипированием асм-кода. Но тут нужны нетривиальные познания о соглашениях, про которые было сказано выше.
Что касается AB самого, то его история показала, что ниша его мизерна по сравнению с другими компиляторами. Повторяемость кода почти нулевая, поэтому его бессмысленно использовать в реальных проектах. Отсутствие сообщества также показатель нулевого развития проекта. Если бы автор вместо того, чтобы придумывать графический вид ассемблера, сделал бы аналог LAD языка на мк и стандартную схему простого ПЛК на мк, то ниша бы нашлась. Стоимость простых ПЛК начинается где-то с 6-7 тыс. руб. Я думаю, что мк с небольшой обвязкой мог бы не плохо справляться с функциями подобных ПЛК. Уже существует подобная программа (Ladder Logic), она тоже не взлетела, но графика там хуже, чем в AB.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
08.09.2014, 23:25 | 14 |
ИМХО: Не прокатило бы, краеугольный камень ПЛК это надежность и возможность править проект силами обслуживающего персонала. Про надежность AVR не буду, а то съедят меня коллеги, но скажу, что ПЛК на AVR использовать не стал бы и другим не советовал бы. Второй постулат "аналог LAD" тоже не взлетит, обслуживающему персоналу изучить еще один язык не с руки, а но им не надо. В бытовом секторе взлетела же ардуина и теперь её хрен подвинешь. Хотя когда я увидел их среду, я испытал что то сравни с шоком как такая IDE и так популярна.
0
|
09.09.2014, 01:01 | 15 |
У меня был прибор автоматизации, основанный на ATmega32, который проработал практически в непрерывном режиме года три. Это был школьный музыкальный звонок. Кроме того, я работал в фирме, где меги заложены в ядро модулей для систем автоматизации. Использовать мк в качестве основы для ПЛК можно. Есть даже книжки со схемами таких ПЛК, но программы там предлагают писать на ассемблере.
Обслуживающему персоналу LAD вообще не нужно знать, они за HMI сидят и кнопки жмут. Автоматчику же всё равно, так как они все технари и LAD у них не самая большая проблема. Я вот делаю умную квартиру и в щиток ставлю параллельно релейной логике китайский ПЛК. Ставить же Ардуину в щиток я вряд ли буду, это не серьёзно, хотя вполне домашнее применение. Китайский ПЛК обошёлся мне в 6 тыс. руб и именно поэтому я его ставлю, он дешёвый. Настоящие аналоги стоят в 3 и более раз дороже. Если бы был похожий ПЛК на AVR, то он был бы дешевле китайского и лучше я бы поставил его.
0
|
09.09.2014, 04:04 | 16 |
LD под PIC and AVR
SMH-2010. Логика для кнопки "Stop" зы: как то работал с SMH-2010 в среде SMLogix. Они были собраны на ATMega128.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
09.09.2014, 12:41 | 17 |
Изменяюсь что не по теме.
Сразу скажу, что avr люблю и года четыре работал в компании где основными используемыми МК были разнообразные AVR, у меня даже IAR был лицензионным (какой кошмар). Изделия (не ПЛК) выпускали партиями от 5 тысяч в месяц. Кстати было интересно смотреть на статистику закупок для гарантийного и пост гарантийного ремонта, с каждым годом всё меньше и меньше требовалось закупать МК (видел и эпические отказы 78L05 до 30% в гарантийный срок). Но реалии поменялись и если сравнивать AVR с ближайшим одноклассникам(цена, функционал) то STM8 выглядеть будет предпочтительней. Вот что сразу пришло в голову: 1. Система тактирования: У AVR жестка привязана к конфигурации МК, у stm8 управляется программно, а наличие модуля CSS (Clock Security System) позволяет в случаи сбоя/поломки внешнего тактирования автоматически перейти на встроенный осциллятор и сообщить программе об этом событии через прерывания. 2. Система сброса и питания: Плавное нарастание питание при включении может привести, что МК просто не запустится. Провалы питания приводят к самопроизвольной порчи данных памяти EEPROM, в принципе устраняется установкой супервизора, но тенденция не хорошая. 3. Очень медленная EEPROM с запретом всех прерываний вовремя обращения к ней. 4. Отсутствие толерантности к 5 Вольтам, если питание 3.3 или ниже, на всех IO кроме TWI. 5. Менее помехозащищеное ядро по сравнению с CISK (stm8) 6. Всего один wtd у stm8 их три. 7. Систему защиты прошивки ломают уже много людей и достаточно бюджетненько. И откуда только электронные микроскопы у них Из собственного опыта: При электростатических тестах очень, очень редко, но всё же присутствует полное зависание МК даже собака не выводит обратно. Остановка ядра МК при температуре -18С ... -22С хотя партия была маркирована как индустрис, то есть работа до -40С (года полтора назад на новой тинке 2313 проверял, нужно было израсходовать фрезер, ситуация повторилась). Про питание писал выше, пришлось удорожать изделия ставя супервизор. Не технические проблемы: Я два раза попадал на не возможность за разумные деньги и сроки поставки купить партии avr(ок) от 1000 штук. Да и большинство кто занимается сериями на это попадали. Стоимость на stm8 очень вкусная, предприятие где работаю сейчас закупает STM8S003F3P6, цена в Китае для партии 1000 штук 7 центов. Думаю что цена здесь вместе со всеми накладными расходами будет в районе 6 рублей (когда придут уточню). P.S. Еще кручи пром электронику строить на MSP или Renesas, но это уже другие деньги получаются. Читал про Renesas, такое впечатление что его параноики создавали
0
|
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
|
|
12.09.2014, 10:33 | 18 |
Как тебе уже говорили, любая функция на Си при компиляции будет соответствовать конкретному "Соглашению о вызове" (почитай, что это такое, например, на wiki). Конкретный случай определяется из
- ОС - Архитектуры процессора - Разрядности процессора - Компилятора "Соглашение о вызове" определяет: - как называются функции (например, ExitProcess(int), будет представлен, как _ExitProcess@4 в Win32) - как передаются параметры (через стек / через регистры и в каком порядке) - как возвращается результат (через какой регистр, или скрытый параметр стека) - кто очищает стек (вызывающий код или подпрограмма) - какие регистры можно изменить, и какие должны содержать тоже значение, что и до вызова Компилятор Си - не будет оптимизировать передачу параметров, при вызове функции, он всегда будет держаться правил. Поэтому, если ты пишешь функцию на ASM, то должен следовать тому соглашению, которому следует компилятор Си или другого языка. При сборке приложения будет происходить: - компиляция ASM-файлов в объектные - компиляция Си-файлов в объектные - компоновка (линковка) объектных файлов в исполняемый файл/прошивку.
0
|
12.09.2014, 10:33 | |
12.09.2014, 10:33 | |
Помогаю со студенческими работами здесь
18
Использование одного файла с кодом в проектах на C# и C EF использование одного ApplicationDbContext в двух проектах Использование стандартных ActiveX в HTML-проектах использование SQLite в болших веб-проектах Файл базы данных mdf (использование в проектах) Использование std::string в проектах Windows Forms Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |