Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите с ассемблером gcc-avr
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
glonium
Доброго времени суток уважаемые форумчане!
Недавно появилась необходимость написать функцию для atmega88 на ассемблере
за руководство к действию принял к сведению http://we.easyelectronics.ru/AVR/avr-gcc-s...om-proekte.html
написал простую подпрограмму которая дрыгает ногой всё получилось и заработало!
Далее появилась необходимость ввест что то типа #define в С, написал следующий код

#include <OW_phy.h>

.def ow_port=$05
.def ow_ddr= $04
.def ow_pin= $00

.def wait1tick=0xFF


.globl OW_Rest_Bus

OW_Reset_Bus :
sei
push r18
sbi ow_ddr, ow_pin
cbi ow_port, ow_pin
ldi r18,wait1tick
wait1 :
dec r18
brbc 1,wait1

ret
Но компилятор выдал кучу ошибок что то в виде

OW_phy.s|3|Error: unknown pseudo-op: `.def'|
OW_phy.s|3|Error: junk at end of line, first unrecognized character is `0'|
OW_phy.s|4|Error: unknown pseudo-op: `.def'|
OW_phy.s|4|Error: junk at end of line, first unrecognized character is `0'|
OW_phy.s|5|Error: unknown pseudo-op: `.def'|
OW_phy.s|5|Error: junk at end of line, first unrecognized character is `0'|
OW_phy.s|7|Error: unknown pseudo-op: `.def'|
OW_phy.s|15|Error: constant value required|
OW_phy.s|15|Error: constant value required|
OW_phy.s|16|Error: constant value required|
OW_phy.s|16|Error: constant value required|
||=== Build finished: 11 errors, 0 warnings ===|

Прошу сильно не бить!!! И помогите пожалуйста разабраться что не так!!!
Заранее большое спасибо!!
ReAl
Не .def, а .set
И вручную порты задавать смысла нет.

Код
.nolist
#define __SFR_OFFSET 0 // чтобы не писать SFR_IO_ADDR(PORTB)
#include <avr/io.h>
.list

.set    LINE_PIXELS, 1024
.set    LINE_MIN_SCAN_PIXELS, 1026

.set    CLK_CYCLES, 4
.set    PIXEL_CYCLES, 4 * CLK_CYCLES

; ...
    .text

;-- main  ----------------------------------------------------------------------
    .global main
main:
    ldi    r16, 0x01
    out    DDRBB, r16
; ....
    .global PCINT0_vect
PCINT0_vect:
; ....
    reti
Так пришьётся запускалка из библиотеки со всеми векторами, проинициализируется указатель стека, потом будет переход на main. Если на это жалко места, то можно врукопашную.
Если нужна только одна функция, то просто учтите .set вместо .def и не забывайте про стандартные include-файлы, <avr/io.h> прекрасно и в ассемблере работает.
glonium
спасибо за помощь!!
Учту! sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.