реклама на сайте
подробности

 
 
> помогите с ассемблером gcc-avr
glonium
сообщение Mar 8 2012, 17:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 27-05-11
Пользователь №: 65 303



Доброго времени суток уважаемые форумчане!
Недавно появилась необходимость написать функцию для 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 ===|

Прошу сильно не бить!!! И помогите пожалуйста разабраться что не так!!!
Заранее большое спасибо!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Mar 8 2012, 20:07
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Не .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> прекрасно и в ассемблере работает.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016