|
Пытаюсь освоить ASM вставку |
|
|
|
Dec 2 2008, 13:59
|

Местный
  
Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596

|
Я основной разработчик и концептор сайта http://www.swordgreenline.narod.ru/До этого я разрабатывал некоммерческий софт для нашего сайта на асме. По просьбам пользователей сейчас пробую прикрутить коммуникационный драйвер на СИ. Т.е. 1 есть рабочий драйвер на СИ 2 есть отлаженная программа на асме и я хочу объединить их. на СИ всё переписать нереально - элементарно не влезет... пишу под ATMega8с вопросом сборки проекта на си я разобрался... поставил avr-gcc. Пакет avr-gcc на платформе Windows входит в состав пакета WinAVR. собираю через Makefile и получаю рабочий хэкс. Теперь подходим к вопросу как делать вставки на асме в программу СИ мне нужен массив. как я понял на СИ массив и переменная его заполненности объявляются так: #define My_BUFLEN 254 static unsigned short My_buf[My_BUFLEN]; static uchar My_head = 0; теперь вопрос 1) как правильно объявить асм вставку? 2) из асма обратиться к массиву? 3) можно ли создать процедуру на асме вызываемую с СИ? на Си в коде есть ещё одна структура static uchar Buffinput[6] = { 1, 0,0,0,0,0, } как обратиться к ней на асме? Как на си объявить обработчик прерывания по переполнению таймера на асме это выглядит так .org OVF0addr ; Overflow0 Interrupt Vector adres rjmp OVF0handler ; Прерывание по переполнению ниже OVF0handler: действие reti
Сообщение отредактировал QuickWitted - Dec 2 2008, 14:36
--------------------
|
|
|
|
|
 |
Ответов
|
Dec 2 2008, 14:19
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(QuickWitted @ Dec 2 2008, 16:59)  Теперь подходим к вопросу как делать вставки на асме в программу СИ
мне нужен массив. Нет, нужен кусок кода. Массив - это данные. Цитата теперь вопрос 1) как правильно объявить асм вставку? Вставить асм команду в С программу - asm("...") Цитата 2) из асма обратиться к массиву? 3) можно ли создать процедуру на асме вызываемую с СИ? Так, тут надо уточнить детали - кусок программы на asm используется как 'черный ящик' (в виде готового hex), или же он компилируется вместе с программой на С ? Если первое, то все взаимодействие придется проводить на уровне голых адресов (т.е. никаких массивов в С), если второе, то можно состыковать и массивы и процедуры, причем в обе стороны. Цитата Как на си объявить обработчик прерывания по переполнению таймера на асме это выглядит так
.org OVF0addr ; Overflow0 Interrupt Vector adres rjmp OVF0handler ; Прерывание по переполнению Смотри доки к winavr, какое то ключевое слово (типа __attribute__((interrupt)) или соотвествующий define) у описания функции
|
|
|
|
|
Dec 2 2008, 14:28
|

Местный
  
Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596

|
Цитата(XVR @ Dec 2 2008, 19:19)  Вставить асм команду в С программу - asm("...") Мне не команду а кусок обработчика моей математики... Цитата(XVR @ Dec 2 2008, 19:19)  Так, тут надо уточнить детали - кусок программы на asm используется как 'черный ящик' (в виде готового hex), или же он компилируется вместе с программой на С ? в виде файла асм, который я написал и отладил. обработчик прерывания, который заполняет массив данными их пережёвывает, получает хэш, сравнивает по табличке и выдаёт результат в static uchar Buffinput[6] = { 1, 0,0,0,0,0, } после драйвер на си занимается их передачей во внешний мир.
--------------------
|
|
|
|
|
Dec 2 2008, 14:37
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(QuickWitted @ Dec 2 2008, 16:28)  Мне не команду а кусок обработчика моей математики... в виде файла асм, который я написал и отладил. обработчик прерывания, который заполняет массив данными их пережёвывает, получает хэш, сравнивает по табличке и выдаёт результат в static uchar Buffinput[6] = { 1, 0,0,0,0,0, }
после драйвер на си занимается их передачей во внешний мир. Для того что бы можно было вызвать асм-функцию из с-функции, асм-функция должна соответствовать соглашению о используемых регистрах, которое называется ABI, ссылку приводил. Если же хотите в с-фунцию вставить асм код - читайте про формат inline assembly для gcc, ссылки приводил.
|
|
|
|
Сообщений в этой теме
QuickWitted Пытаюсь освоить ASM вставку Dec 2 2008, 13:59 gotty http://www.ibiblio.org/gferg/ldp/GCC-Inlin...mbly-... Dec 2 2008, 14:15 QuickWitted Цитата(gotty @ Dec 2 2008, 19:15) А ещё п... Dec 2 2008, 14:38 gotty Цитата(QuickWitted @ Dec 2 2008, 16:38) И... Dec 2 2008, 14:40   QuickWitted Цитата(gotty @ Dec 2 2008, 19:37) Для тог... Dec 2 2008, 14:50    gotty Цитата(QuickWitted @ Dec 2 2008, 16:44) Б... Dec 2 2008, 14:54     QuickWitted Цитата(gotty @ Dec 2 2008, 19:54) Разве? ... Dec 2 2008, 15:01      gotty Цитата(QuickWitted @ Dec 2 2008, 17:01) Е... Dec 2 2008, 15:06       zltigo Цитата(gotty @ Dec 2 2008, 18:06) Да и ес... Dec 2 2008, 17:50        QuickWitted Цитата(zltigo @ Dec 2 2008, 22:50) А заче... Dec 2 2008, 17:58         _Pasha Цитата(QuickWitted @ Dec 2 2008, 21:58) г... Dec 2 2008, 18:29          zltigo Цитата(_Pasha @ Dec 2 2008, 21:29) и vola... Dec 2 2008, 19:41           Огурцов Неа, Об авторе. Dec 2 2008, 20:11            QuickWitted Ну и финальный вопрос
как в си указать куда компи... Dec 3 2008, 16:18             Сергей Борщ Цитата(QuickWitted @ Dec 3 2008, 18:18) в... Dec 3 2008, 16:48              QuickWitted Прочитал предложенную документацию, но понимания н... Dec 4 2008, 06:07               zltigo Цитата(QuickWitted @ Dec 4 2008, 09:07) .... Dec 4 2008, 06:32                QuickWitted Цитата(zltigo @ Dec 4 2008, 11:32) Понима... Dec 4 2008, 07:50                 777777 Цитата(QuickWitted @ Dec 4 2008, 10:33) И... Dec 4 2008, 07:55                  QuickWitted Цитата(777777 @ Dec 4 2008, 12:55) Как те... Dec 4 2008, 09:40                   777777 Цитата(QuickWitted @ Dec 4 2008, 12:40) Т... Dec 4 2008, 10:23                    QuickWitted Цитата(777777 @ Dec 4 2008, 15:23) Извини... Dec 4 2008, 10:38                     _Pasha Цитата(QuickWitted @ Dec 4 2008, 14:38) Д... Dec 4 2008, 10:52                      QuickWitted Цитата(_Pasha @ Dec 4 2008, 15:52) Понял,... Dec 4 2008, 13:58                       XVR Цитата(QuickWitted @ Dec 4 2008, 16:58) а... Dec 4 2008, 18:10                        QuickWitted Цитата(XVR @ Dec 4 2008, 23:10) Да уж, уз... Dec 5 2008, 02:18                         XVR Цитата(QuickWitted @ Dec 5 2008, 05:18) Л... Dec 5 2008, 09:31                          QuickWitted Цитата(XVR @ Dec 5 2008, 14:31) У пользов... Dec 5 2008, 11:24                           defunct Цитата(QuickWitted @ Dec 5 2008, 13:24) Б... Dec 7 2008, 04:28                            QuickWitted Цитата(defunct @ Dec 7 2008, 09:28) даже ... Dec 7 2008, 11:45                             defunct Цитата(QuickWitted @ Dec 7 2008, 13:45) 1... Dec 7 2008, 21:12                              QuickWitted Цитата(defunct @ Dec 8 2008, 02:12) 1 - E... Dec 8 2008, 10:11                 Сергей Борщ Цитата(QuickWitted @ Dec 4 2008, 09:50) е... Dec 4 2008, 10:24               _Pasha Цитата(QuickWitted @ Dec 4 2008, 10:07) Т... Dec 4 2008, 08:36    XVR Цитата(QuickWitted @ Dec 2 2008, 17:50) в... Dec 2 2008, 18:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|