|
Пытаюсь освоить 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, ссылки приводил.
|
|
|
|
|
Dec 2 2008, 14:50
|

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

|
Цитата(gotty @ Dec 2 2008, 19:37)  Для того что бы можно было вызвать асм-функцию из с-функции, асм-функция должна соответствовать соглашению о используемых регистрах Брр... Ты помоему про комповый СИ, а я про WinAVR и никаких особых соглашений я в примере не видел.... Рабочий пример /* Register assignments for usbMeasureFrameLength on gcc */ /* Calling conventions on gcc: * First parameter passed in r24/r25, second in r22/23 and so on. * Callee must preserve r1-r17, r28/r29 * Result is passed in r24/r25 */ # define resL r24 # define resH r25 # define cnt16L r24 # define cnt16H r25 # define cntH r26 #endif # define cnt16 cnt16L ; extern unsigned usbMeasurePacketLength(void); ; returns time between two idle strobes in multiples of 7 CPU clocks .global usbMeasureFrameLength usbMeasureFrameLength: ldi cntH, 6 ; wait ~ 10 ms for D- == 0 clr cnt16L clr cnt16H usbMFTime16: dec cntH breq usbMFTimeout usbMFWaitStrobe: ; first wait for D- == 0 (idle strobe) sbiw cnt16, 1 ;[0] [6] breq usbMFTime16 ;[2] sbic USBIN, USBMINUS ;[3] rjmp usbMFWaitStrobe ;[4] usbMFWaitIdle: ; then wait until idle again sbis USBIN, USBMINUS ;1 wait for D- == 1 rjmp usbMFWaitIdle ;2 ldi cnt16L, 1 ;1 represents cycles so far clr cnt16H ;1 usbMFWaitLoop: in cntH, USBIN ;[0] [7] adiw cnt16, 1 ;[1] breq usbMFTimeout ;[3] andi cntH, USBMASK ;[4] brne usbMFWaitLoop ;[5] usbMFTimeout: #if resL != cnt16L mov resL, cnt16L mov resH, cnt16H #endif ret #undef resL #undef resH #undef cnt16 #undef cnt16L #undef cnt16H #undef cntH #endif /* USB_CFG_HAVE_MEASURE_FRAME_LENGTH */ Регистров из примера мне хватит... вопрос как обратиться к элементу массива? как обратиться к элементу структуры из 6 байт? как обратиться к переменной? А функцию мне надо без параметров и возвращаемых величин. просто запустить на исполнение амс код.
--------------------
|
|
|
|
|
Dec 2 2008, 14:54
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(QuickWitted @ Dec 2 2008, 16:44)  Брр... Ты помоему про комповый СИ, а я про WinAVR и никаких особых соглашений я в примере не видел....
Рабочий пример /* Register assignments for usbMeasureFrameLength on gcc */ /* Calling conventions on gcc: * First parameter passed in r24/r25, second in r22/23 and so on. * Callee must preserve r1-r17, r28/r29 * Result is passed in r24/r25 */ Разве? Мы наверно просто на разных языках говорим  ABI = Calling conventions Цитата What registers are used by the C compiler?
Data types: char is 8 bits, int is 16 bits, long is 32 bits, long long is 64 bits, float and double are 32 bits (this is the only supported floating point format), pointers are 16 bits (function pointers are word addresses, to allow addressing up to 128K program memory space). There is a -mint8 option (see Options for the C compiler avr-gcc) to make int 8 bits, but that is not supported by avr-libc and violates C standards (int must be at least 16 bits). It may be removed in a future release. Call-used registers (r18-r27, r30-r31): May be allocated by gcc for local data. You may use them freely in assembler subroutines. Calling C subroutines can clobber any of them - the caller is responsible for saving and restoring. Call-saved registers (r2-r17, r28-r29): May be allocated by gcc for local data. Calling C subroutines leaves them unchanged. Assembler subroutines are responsible for saving and restoring these registers, if changed. r29:r28 (Y pointer) is used as a frame pointer (points to local data on stack) if necessary. The requirement for the callee to save/preserve the contents of these registers even applies in situations where the compiler assigns them for argument passing. Fixed registers (r0, r1): Never allocated by gcc for local data, but often used for fixed purposes: r0 - temporary register, can be clobbered by any C code (except interrupt handlers which save it), may be used to remember something for a while within one piece of assembler code
r1 - assumed to be always zero in any C code, may be used to remember something for a while within one piece of assembler code, but must then be cleared after use (clr r1). This includes any use of the [f]mul[s[u]] instructions, which return their result in r1:r0. Interrupt handlers save and clear r1 on entry, and restore r1 on exit (in case it was non-zero).
Function call conventions: Arguments - allocated left to right, r25 to r8. All arguments are aligned to start in even-numbered registers (odd-sized arguments, including char, have one free register above them). This allows making better use of the movw instruction on the enhanced core. If too many, those that don't fit are passed on the stack.
Return values: 8-bit in r24 (not r25!), 16-bit in r25:r24, up to 32 bits in r22-r25, up to 64 bits in r18-r25. 8-bit return values are zero/sign-extended to 16 bits by the called function (unsigned char is more efficient than signed char - just clr r25). Arguments to functions with variable argument lists (printf etc.) are all passed on stack, and char is extended to int.
Warning: There was no such alignment before 2000-07-01, including the old patches for gcc-2.95.2. Check your old assembler subroutines, and adjust them accordingly. GCC - это не компилятор только для AVR, а семейство компиляторов для разных архитектур и языков. По этому документацию иногда приходится адаптировать под свою платформу  По ссылкам про inline assembly надо было разобраться не в ассемблере, а способе взаимодействия ассемблерных вставок и окружающего С-кода и данных. Может это будет проще понять http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
|
|
|
|
|
Dec 2 2008, 15:01
|

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

|
Цитата(gotty @ Dec 2 2008, 19:54)  Разве? Мы наверно просто на разных языках говорим  Если не трудно - дай пример работы с массивами... как обратиться с асма... с утра уже в нете ковыряюсь... с нулевым результатом.... все массивы на си лопатят, а у меня массив и это чудо с 6 переменными...
--------------------
|
|
|
|
|
Dec 2 2008, 17:58
|

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

|
Цитата(zltigo @ Dec 2 2008, 22:50)  А зачем тут этот самый костыль-inline всовывать-то? Пусть читает правила взаимодейстия, или просто (для особо ленивых) скомлировалась болванка будующей ASM функции и все. Первое там много и под все платформы второе - где конкретно написано про доступ к переменным си кода из Асма? Афоризм: Словом можно обидеть. Словарем - убить.
Сообщение отредактировал QuickWitted - Dec 2 2008, 18:19
--------------------
|
|
|
|
|
Dec 2 2008, 18:29
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(QuickWitted @ Dec 2 2008, 21:58)  где конкретно написано про доступ к переменным си кода из Асма? Объявите переменную extern в асмовом файле. Все объекты в сишном, которые используются в асмовом, должны быть глобальными и volatile Поля структур размещаются в памяти в порядке их декларации, в т.ч. битовые - с младших битов, с учетом выравнивания по 8 битам в данном случае. Порядок нумерации элементов массива... забыл, сорри  Из асма лучше не вызывать сишных функций с параметрами.
|
|
|
|
|
Dec 2 2008, 19:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(_Pasha @ Dec 2 2008, 21:29)  и volatile Не нужно. Совсем не нужно. Цитата Из асма лучше не вызывать сишных функций с параметрами. Соблюдая соглашения совершенно без проблем. Цитата(QuickWitted @ Dec 2 2008, 20:58)  Первое там много и под все платформы Так читайте под свою. Цитата(QuickWitted @ Dec 2 2008, 16:59)  Я основной.. По-русски "Об Авторе", а не "О Авторе"...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 4 2008, 07:50
|

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

|
Цитата(zltigo @ Dec 4 2008, 11:32)  Понимание самых основ отсутствуют начисто  . И не спорю - второй день на си смотрю... поэтому и спросил в теме "В помощь начинающему" Цитата(zltigo @ Dec 4 2008, 11:32)  Ибо 'ASM' файл-ы никакими-то 'include' цепляются, а из них ASSEMBLER делает ОБЪЕКТНЫЕ файл-ы. Из 'C' файлов уже КОМПИЛЯТОР (возможно через стадию ASM) делает тоже обьектные файлы, а уже ЛИНКЕР собирает эти объектые файлы в единое целое, причем, вместе с БИБЛИОТЕКАМИ. И какой алгоритм дальнейших действий из этого следует? ну назовём их приконекченными через стадию ОБЪЕКТНОГО файла. но суть то осталась - файл входящий в проект. Что асм файлы званого пересобираются при сборке - вижу Что асм файлы конектятся к проекту и в них находятся ошибки - вижу единственное что явно из этого следует, так это то, что пункт 2 невозможен... "2 - процедура оболочка на СИ в которую вставляется файл с асм кодом. " Но первый, то пункт остался... "1 - процедура, без параметров объявленная в асм файле" И как её создать и приконектить? (если можно с примером. Например Mov PortB, 0x15) Цитата(Сергей Борщ @ Dec 3 2008, 21:48)  А в СИ (да и в асмах тоже) этим занимается линкер. Читайте описание ld в binutils. 20 минут ковырялся... если по поиску, то асм оператор ld встречается во мнигих местах текста доки binutils, но на сколько я понял надо функцию или ключь ld. Не подскажите подраздел справки?
--------------------
|
|
|
|
|
Dec 4 2008, 09:40
|

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

|
Цитата(777777 @ Dec 4 2008, 12:55)  Как тебе удалость с такими знаниями стать основным разработчиком? Все мы, конечно, были когда-то начинающими, но мы работали под руководством более опытных товарищей. А тут сразу - основной разработчик...  Я на дэльфи и на асме пишу уже лет 10... на си смотрю только второй день... Ты на второй день все тонкости знал? Мои разработки на сайте и на данный момент не имеют бесплатных аналогов (я про хэширование) И используются во многих программных продуктах (Слай, ПерехватЪ и т.д.) а на твои разработки такого же класса глянуть можно? а про сайт написал только для уточнения что я не студент делающий дипломную и работа бесплатная - страдаю альтруизмом и пытаюсь сделать для всех.
--------------------
|
|
|
|
|
Dec 4 2008, 10:38
|

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

|
Цитата(777777 @ Dec 4 2008, 15:23)  Извини если чем-то обидел. На второй день я всех тонкостей, конечно, не знал. Я бы с удовольствием код на си на кого-нибудь скинул... но остальные заняты основной работой и освободятся от отчётов похоже уже только в следующем году... к тому же в нашей команде никого нет кто бы в тонкостях знал си под мк... под комп пишут... поэтому ковыряться приходится мне... Теперь к нашим си файлам... Для тех кто Makefile от WinAVR-20080610 видел давно... там нет гуи. это текстовый файл который меня уже достал, но в комплекте с драйвером был только он с пояснениями поставить редактор Notepad2 а всё это собирать в hex запустив cmd и набрать ручками make hex. оно то собирается, но как сюда что либо добавить я не знаю... правильней сказать чем скомпилировать файл *.o добавляющий АСМ просто в Makefile подключаются *.o Но т.к. я с СИ вожусь только второй день я НЕ ЗНАЮ на что с него перейти. Тут вспоминали про руководителя - нет вокруг никого кто си знает даже на комп. все на дэльфях сидят...
--------------------
|
|
|
|
|
Dec 4 2008, 10:52
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(QuickWitted @ Dec 4 2008, 14:38)  Для тех кто Makefile от WinAVR-20080610 видел давно... там нет гуи. Понял, повторяю более развернуто: 0. ставим WinAVR (поставлено) 1. Ставим AVRstudio (поставлено?) 2. Создаем в AVRstudio проект. Тип проекта Avr-GCC 3. Веселые окошечки студии как раз и призваны помочь освоить дебри в написании makefile, и при том, что все продвинутые программеры матюкаются на генерируемый студией makefile, Вам оно - как раз то что надо. Есть еще меню project/Export Makefile - потом можно покопаться в гумусе. А так - просто добавляете файлы в проект, созданный в AVRstudio Теперь понятно ?
|
|
|
|
|
Dec 4 2008, 13:58
|

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

|
Цитата(_Pasha @ Dec 4 2008, 15:52)  Понял, повторяю более развернуто: 0. ставим WinAVR (поставлено) 1. Ставим AVRstudio (поставлено?) было да... но проекта не видел (только асм) пришлось снести и ставить всё заново... появился... если бы не сказал, я бы его до следующего падения винды и перестановки софта не видел… ковыряю дальше... Цитата(_Pasha @ Dec 4 2008, 15:52)  2. Создаем в AVRstudio проект. Тип проекта Avr-GCC 3. Веселые окошечки студии как раз и призваны помочь освоить дебри в написании makefile, и при том, что все продвинутые программеры матюкаются на генерируемый студией makefile, Вам оно - как раз то что надо. Я свой собирал сам в блокноте... Цитата(_Pasha @ Dec 4 2008, 15:52)  Есть еще меню project/Export Makefile - потом можно покопаться в гумусе. Это видел ещё в первый день... но к тому времени уже собрал... а асм файл туда не лезет... пункт есть, а при указании пишет файл не найден Цитата(_Pasha @ Dec 4 2008, 15:52)  А так - просто добавляете файлы в проект, созданный в AVRstudio Теперь понятно ? Куда копать да... копаю... а про точку компиляции - решил сделать линкер-патчер сам... намного быстрее его написать чем два вечера доку изучать… (да кстати я их пишу ко всем проектам в качестве настройщика... например в IgorRele блок математики и таблицы импортируются патчером по данным замера пульта пользователя...) Всем большое спасибо - тема закрыта.
Сообщение отредактировал QuickWitted - Dec 4 2008, 14:09
--------------------
|
|
|
|
|
Dec 5 2008, 02:18
|

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

|
Цитата(XVR @ Dec 4 2008, 23:10)  Да уж, узнаю 'професиональный' подход - сделать свой кривой велосипед с квадратными колесами, лишь бы доку не изучать  Ладно подскажи свой 'профессиональный' способ пере собрать проект у пользователя.... (т.к. вся математика разом просто не лезет..., а данные пультов у каждого свои) так файл анализа и исходную прошивку указал, кнопку щёлкнул - получил прошивку... для юзверей самое то... или в доке для юзверя ты предлогаешь написать - скачать среду разработки, изучить мануал к ней, поменять блок распознавания, пересобрать проект... Мк взять побольше и флэшку внешнюю не предлагать... Для тех кто повторяет это сложнее и дороже… Ещё идея чайника - а давайте сделаем на 2х процах всё то что обычно у опытных разработчиков в один влезает...
Сообщение отредактировал QuickWitted - Dec 5 2008, 02:33
--------------------
|
|
|
|
|
Dec 5 2008, 09:31
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(QuickWitted @ Dec 5 2008, 05:18)  Ладно подскажи свой 'профессиональный' способ пере собрать проект у пользователя.... (т.к. вся математика разом просто не лезет..., а данные пультов у каждого свои) У пользователя вообще ничего пересобираться не должно. У него должен быть девайс (в коробке) и GUI на PC для его настройки на его конкретную математику. Девайс должен уметь загрузить и прошить в себя часть прошивки (те самые настройки) Цитата так файл анализа и исходную прошивку указал, кнопку щёлкнул - получил прошивку... для юзверей самое то... Юзвери разные бывают, если бы я своим сказал, что для запуска моего девайса им понадобится программатор, они меня бы побили Цитата или в доке для юзверя ты предлогаешь написать - скачать среду разработки, изучить мануал к ней, поменять блок распознавания, пересобрать проект... Ой, никоим образом  Я просто говорю, что делать патчер, вместо того, что бы разобраться с линкером, это верх идиотизма (или лени) Цитата Мк взять побольше и флэшку внешнюю не предлагать... Для тех кто повторяет это сложнее и дороже… Ещё идея чайника - а давайте сделаем на 2х процах всё то что обычно у опытных разработчиков в один влезает... У опытных разработчиков это называется не 'патчер' а как нибудь типа 'platform builder', и надобности в таких приемах возникают КРАЙНЕ редко. (Хотя девайс со сменяемой частью прошивки под конкретную математику вполне попадает в это 'крайне редко') PS. Советую все же изучить процесс сборки программ (и вообще концепцию независимой компиляции и сборки) и ld в частности (лучше сразу все binutils). Во первых это используется ВЕЗДЕ, во вторых это ОЧЕНЬ мощный инструмент, в 99% он может вполне заменить самописные патчеры. PPS. Независимая компиляция и последующая сборка применяется даже на чистом асме
|
|
|
|
|
Dec 5 2008, 11:24
|

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

|
Цитата(XVR @ Dec 5 2008, 14:31)  У пользователя вообще ничего пересобираться не должно. У него должен быть девайс (в коробке) и GUI на PC для его настройки на его конкретную математику. Девайс должен уметь загрузить и прошить в себя часть прошивки (те самые настройки) Юзвери разные бывают, если бы я своим сказал, что для запуска моего девайса им понадобится программатор, они меня бы побили  Бутлоадер жрёт память... а я в притык и так... т.е. при реализации бутлоадера - уменьшится кол во кнопок... Ставить 16 мегу не хочу… (она дороже и больше по габаритам – в стик не влезет) Цитата(XVR @ Dec 5 2008, 14:31)  Я просто говорю, что делать патчер, вместо того, что бы разобраться с линкером, это верх идиотизма (или лени) не вместо... патчер по любому понадобится... Цитата(XVR @ Dec 5 2008, 14:31)  У опытных разработчиков это называется не 'патчер' а как нибудь типа 'platform builder', и надобности в таких приемах возникают КРАЙНЕ редко. (Хотя девайс со сменяемой частью прошивки под конкретную математику вполне попадает в это 'крайне редко') Я не долгодумая назвал хэкс утил... И даже последние три месяца в ней ничего не правил... (не было баг репортов) может ошибки кончились
--------------------
|
|
|
|
|
Dec 7 2008, 04:28
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(QuickWitted @ Dec 5 2008, 13:24)  Бутлоадер жрёт память...а я в притык и так... даже 128 слов, самый самый простой не влезет? Цитата т.е. при реализации бутлоадера - уменьшится кол во кнопок... не совсем понятно как количество кнопок кореллирует с бутлоадером. Цитата Ставить 16 мегу не хочу… (она дороже и больше по габаритам – в стик не влезет) А 168-ую? корпус такой же как m8. Цитата Т.е. 1 есть рабочий драйвер на СИ 2 есть отлаженная программа на асме и я хочу объединить их. Если есть возможность/время перепишите весь С-ишный модуль на ASM. Закончите этот проект, и потом забудьте про ASM и неспешно годик поработайте с C, понимание "что и как" придет само. Если нет такой возможности - тогда пока забейте на WinAvr (для старта gcc - сложно) - начните с IAR'a там есть IDE (хоть и убогое) но для старта лучше и документация IMHO более удобная. После IAR'а, gcc осваивается легче.
|
|
|
|
|
Dec 7 2008, 11:45
|

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

|
Цитата(defunct @ Dec 7 2008, 09:28)  даже 128 слов, самый самый простой не влезет? 1 - Я остаток заполнил данными о кнопках... 2 - прогу которая собирает прошивку никто не отменял. 3 - как заливать прошивку - через что? добавить блок для стыковкой с компом? а чем это будет отличаться от своего программатора? если через USB, нужен либо новый дескриптор либо, новую функцию... будет явно больше 128 Цитата(defunct @ Dec 7 2008, 09:28)  А 168-ую? корпус такой же как m8. стоит она НАМНОГО больше и у нас только под заказ. Цитата(defunct @ Dec 7 2008, 09:28)  Если есть возможность/время перепишите весь С-ишный модуль на ASM. Закончите этот проект, и потом забудьте про ASM и неспешно годик поработайте с C, понимание "что и как" придет само. Это хобби... а си меня всегда поражал... процедура с 1 nop и присвоением 1 переменной значения... на асме 3 строки и один регистр а си перебирает практически все регистры... +0000036D: 919F POP R25 Pop register from stack +0000036E: 918F POP R24 Pop register from stack +0000036F: 900F POP R0 Pop register from stack Цитата(defunct @ Dec 7 2008, 09:28)  Если нет такой возможности - тогда пока забейте на WinAvr (для старта 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 Цитата(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
|
|
|