136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
1

Использование ASM в проектах на Си

05.09.2014, 19:51. Показов 4550. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет народ. Прочел тут статейку об использовании ассемблера в языках высокого уровня (http://microsin.net/programmin... -code.html ) и заинтересовала меня там строчка "Есть два метода встроить код ассемблера в программу на C. Один метод - прямое встраивание операторов ассемблера в код C. ... Второй метод - написать код ассемблера в отдельном файле и скомпилировать его отдельно в объектный код, а затем присоединить (link) объектный код к основной программе на этапе линковки.". Так вот. Объясните пожалуйста подробнее - как это скомпилировать отдельно asm код а потом его залинковать к си-коду, а, что не менее важно - можно ли получить такой объектный код с помощью Algorithm Builder?

Добавлено через 18 часов 35 минут
Модератор, перекинь тему, пожалуйста, в раздел "микроконтроллеры" может там кто знает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2014, 19:51
Ответы с готовыми решениями:

Использование gsl в проектах
Добрый день, есть у кого уже лайф-хаки по использованию стандартной библиотеки gsl, которая...

Использование интерфейсов в своих проектах
Добрый вечер коллеги! Тема избита до неузнаваемости. Одно дело понять и совсем другое...

Использование окна в двух проектах
Здравствуйте! Как можно использовать окно в двух проектах в пределах одного решения? Например...

Использование стандартных ActiveX в HTML-проектах
Собственно кто нибудь этим занимался? Или вдруг есть какие нибудь ссылки. Буду рад любой помощи!

17
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
05.09.2014, 21:39 2
...вы считаете вашу тему не видят? Она и так в разделе "Микроконтроллеры", ветка была "AVR".
Может ваш вопрос неинтересен. Не подумали об этом?
0
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_
Цитата Сообщение от 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
Цитата Сообщение от NoobsEnslaver Посмотреть сообщение
во-первых тут всё слишком упрощено - нет у асемблерной функции тегов, говорящих компилятору какие регистры там используются, а значит будут проблемы с оптимизацией С-кода
Таки Voland_ и я с этого и начали дискуссию
Цитата Сообщение от NoobsEnslaver Посмотреть сообщение
хотелось бы узнать про запиливание асм-блоков на этапе линковки, а не компиляции.
Сделать так можно, но это на порядок геморройни. Вам придется ручками писать 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 хотя последнее вещь даже очень православная.
А ведь я мечтал операционку на асме наваять и что бы не тлела в веках. Завоевать весь мир, заставить всех писать на асме, не покорных расстрелять, сомневающихся в Сибирь. Вообщем расстроили Вы меня, пойду в wot играть.

0
366 / 144 / 17
Регистрация: 06.03.2010
Сообщений: 301
Записей в блоге: 1
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
Цитата Сообщение от уни Посмотреть сообщение
делал бы аналог LAD языка на мк и стандартную схему простого ПЛК на мк
ИМХО: Не прокатило бы, краеугольный камень ПЛК это надежность и возможность править проект силами обслуживающего персонала. Про надежность AVR не буду, а то съедят меня коллеги, но скажу, что ПЛК на AVR использовать не стал бы и другим не советовал бы. Второй постулат "аналог LAD" тоже не взлетит, обслуживающему персоналу изучить еще один язык не с руки, а но им не надо. В бытовом секторе взлетела же ардуина и теперь её хрен подвинешь. Хотя когда я увидел их среду, я испытал что то сравни с шоком как такая IDE и так популярна.
0
366 / 144 / 17
Регистрация: 06.03.2010
Сообщений: 301
Записей в блоге: 1
09.09.2014, 01:01 15
У меня был прибор автоматизации, основанный на ATmega32, который проработал практически в непрерывном режиме года три. Это был школьный музыкальный звонок. Кроме того, я работал в фирме, где меги заложены в ядро модулей для систем автоматизации. Использовать мк в качестве основы для ПЛК можно. Есть даже книжки со схемами таких ПЛК, но программы там предлагают писать на ассемблере.

Обслуживающему персоналу LAD вообще не нужно знать, они за HMI сидят и кнопки жмут. Автоматчику же всё равно, так как они все технари и LAD у них не самая большая проблема.

Я вот делаю умную квартиру и в щиток ставлю параллельно релейной логике китайский ПЛК. Ставить же Ардуину в щиток я вряд ли буду, это не серьёзно, хотя вполне домашнее применение. Китайский ПЛК обошёлся мне в 6 тыс. руб и именно поэтому я его ставлю, он дешёвый. Настоящие аналоги стоят в 3 и более раз дороже. Если бы был похожий ПЛК на AVR, то он был бы дешевле китайского и лучше я бы поставил его.
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
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
Цитата Сообщение от NoobsEnslaver Посмотреть сообщение
во-первых тут всё слишком упрощено - нет у асемблерной функции тегов, говорящих компилятору какие регистры там используются, а значит будут проблемы с оптимизацией С-кода,
Как тебе уже говорили, любая функция на Си при компиляции будет соответствовать конкретному "Соглашению о вызове" (почитай, что это такое, например, на wiki). Конкретный случай определяется из
- ОС
- Архитектуры процессора
- Разрядности процессора
- Компилятора
"Соглашение о вызове" определяет:
- как называются функции (например, ExitProcess(int), будет представлен, как _ExitProcess@4 в Win32)
- как передаются параметры (через стек / через регистры и в каком порядке)
- как возвращается результат (через какой регистр, или скрытый параметр стека)
- кто очищает стек (вызывающий код или подпрограмма)
- какие регистры можно изменить, и какие должны содержать тоже значение, что и до вызова
Компилятор Си - не будет оптимизировать передачу параметров, при вызове функции, он всегда будет держаться правил.
Поэтому, если ты пишешь функцию на ASM, то должен следовать тому соглашению, которому следует компилятор Си или другого языка.
При сборке приложения будет происходить:
- компиляция ASM-файлов в объектные
- компиляция Си-файлов в объектные
- компоновка (линковка) объектных файлов в исполняемый файл/прошивку.
0
12.09.2014, 10:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2014, 10:33
Помогаю со студенческими работами здесь

Использование одного файла с кодом в проектах на C# и C
Может кто подскажет как решить задачу. Имею устройство сделанное на arduino. Управляется оно с...

EF использование одного ApplicationDbContext в двух проектах
Доброго времени суток коллеги. Есть ASP Core проект использующий EF для доступа к БД. Стала...

Использование стандартных ActiveX в HTML-проектах
Наверное не в тот топик, но нужда заставила. Собственно кто нибудь этим занимался? Или вдруг есть...

использование SQLite в болших веб-проектах
Здравствуйте, уважаемые форумчани! Волнует вопрос использования sqlite в веб-проектах с...

Файл базы данных mdf (использование в проектах)
Подскажите пожалуйста.. Вот к примеру есть файл базы данных *.mdf. Его планируется использовать в...

Использование std::string в проектах Windows Forms
Вот кусок из кода с участием переменной string. Всё необходимое для работы с ней подключено:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru