roboforum.ru

Технический форум по робототехнике.

MEGA16 startup

Резисторы, транзисторы, конденсаторы, микросборки, чип компоненты ...
Вопросы согласования управляющих модулей с периферией.

Re: MEGA16 startup

Сообщение exx » 27 янв 2012, 13:54

Подымаю тему опять, Здрасте :)

Заинсталил AVRStudio5 - красота! Понравилась до немогу (привычная очень = клон MSVS). Создал прож, все кул. Но есть момнент непонимания ассемблера - хочу несколько файлов использовать, т.е. часть кода в одном файле, часть в другом и call-ать себе с одного файла другой. Файлы то добавлять не сложно в проект - а как собственно сделать функу и её прототип в *.inc дабы не орало "unresolved symbol" ???
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение mikkey finn » 27 янв 2012, 20:52

у вас в языках "С, асм". Так пишите на Цэ. Чо паритесь-то?
mikkey finn
 
Сообщения: 104
Зарегистрирован: 09 авг 2011, 17:15
Откуда: Волжский

Re: MEGA16 startup

Сообщение exx » 28 янв 2012, 00:28

люблю асм, на винде он не всегда актуален, а на МК если под одну платформу = самэ то)
может всетаки разъяснит кто, как в разных *.asm файлах код писать и чтобы он компалился.
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение Dmitry__ » 28 янв 2012, 00:43

ни чо не понял, а чем "#include" не устраивают?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: MEGA16 startup

Сообщение exx » 28 янв 2012, 13:45

есть два подключенных к прожекту файла: main.asm (установлен as Entry File) и второй io_layer.asm. Мейн файлик состоит помимо инициализации с кода:
Код: Выделить всёРазвернуть
main:
call CA_VolUp
rjmp main

в io_layer:
Код: Выделить всёРазвернуть
 CA_VolUp:
ret

но при компиляции студия(AVR Studio 5,для жуков.) матерится "Undefined symbol: CA_VolUp". Какбы её я понимаю и с радостью хочу помочь, создаю третий файл io_layer.inc и пытаюсь прописать "прототип" дабы видела что символ CA_VolUp это функция и её можно вызывать. Но прототипы умею пистаь только для MASM а как тут = хз(

собственно вопрос состоит в том - как студию попросить перестать матерится?
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение Dmitry__ » 28 янв 2012, 17:09

Попробую угадать с 3-х нот :)
ставить "AVR Studio 5,для жуков" ради проверки не готов...

В "Мейн файлик" есть "#include io_layer.asm" ?
Если есть, то он до вызова "call CA_VolUp" или после?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: MEGA16 startup

Сообщение exx » 28 янв 2012, 20:48

был инклюд io_layer.inc (под виндосом так правильно и вбить туда прототип функи для компиля, дабы он обжект фалы создал нужные,потом линкер себе уже находит саму функу и линкует как положено, но суть не в том). Сделал ща уже include io_layer.asm - новый еррор "Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1"
прилагаю полный код main.asm
Код: Выделить всёРазвернуть
 .include "m16def.inc"   ;подключение библиотеки для работы с ATmega16
.include "io_layer.asm"

.list   ;включение листинга

.def temp=r16   ;определение главного рабочего регистра

;--------------------------------------------

.cseg    ;выбор сегмента программного кода

.org 0   ;установка текущего адреса на ноль                                                         

;--------------------------------------------

ldi temp,0x80    ;выключение компаратора

out acsr,temp

;--------------------------------------------

ldi temp,0xFF   ;записываем ноль в регистр temp

out ddrd,temp

ldi temp,0xFF   ;записываем 0xff в регистр temp

out ddrb,temp   ;записываем temp в ddrb(порт rb на вывод)

out portb,temp  ;записываем temp в portb(погасить светодиод)

out portd,temp  ;записываем temp в portd(включаем внутренний резистор)

out porta,temp

;---------------------------------------------

main:
call CA_VolUp
rjmp main

и io_layer.asm
Код: Выделить всёРазвернуть
 CA_VolUp:
ret

в итоге,как говорил выше - аррор :sorry:
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение coder_perm » 28 янв 2012, 22:07

перемести .include "io_layer.asm"
в конец, после rjmp main
Аватара пользователя
coder_perm
 
Сообщения: 185
Зарегистрирован: 11 авг 2009, 22:39
Откуда: Пермь
Skype: kudrin_anton
прог. языки: assembler

Re: MEGA16 startup

Сообщение Dmitry__ » 28 янв 2012, 22:11

дык, у тебя .include "io_layer.asm" воткнут до:
Код: Выделить всёРазвернуть
.cseg
.cseg    ;выбор сегмента программного кода
.org 0   ;установка текущего адреса на ноль                       


Он тебе пытается собрать прогу в отрицательных адресах :)
тыкай его после: rjmp main
А вот если после этого ругнется: "Undefined symbol: CA_VolUp"
то тыкай его прямо перед "main:"
И после этого должен перестать ругаться.
А вот если тебе нендравица инклуды в сегменте кода, то будем делать бантики :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: MEGA16 startup

Сообщение exx » 28 янв 2012, 23:40

спасибо, друзья - все норм = переместил .include "io_layer.asm" в конец файла и поехало.
Дмитрий, а как с бантиками, можно их поглядеть? :)

*может можно както сделать
.org SIZEOF(io_layer.asm)
?)
а еще лучше попросить линкер както самому разместить код в нужном порядке, хотя подозреваю с МК такого не получится(
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение Dmitry__ » 29 янв 2012, 02:07

exx писал(а):Дмитрий, а как с бантиками, можно их поглядеть? :)

Оформляй нужные супер-пупер подпрограммы макросами в одном файле и подключай его в начале программы как в СИ. (не в сегменте кода). Названия макросов дублируй названиями подпрограмм. Если компилятор ругается на дублирование названий меток и макросов, то добавляй префикс, например: "M_". В основной проге обьявляй только нужные подпрограммы из этого файла. Если будет ошибка типа: "Undefined symbol" (аля однопроходный компилятор), то обьявлять нужные подпрограммы надо до их вызовов...
Код: Выделить всёРазвернуть
 .include "io_layer.inc"   ;подключение супер-пупер библиотеки

.list   ;включение листинга
.def temp=r16   ;определение главного рабочего регистра
;--------------------------------------------
.cseg    ;выбор сегмента программного кода
.org 0   ;установка текущего адреса на ноль                                                         
;--------------------------------------------

бла
бла
бла
...


io_layer.inc (как в авр макросы обьявляются не помню) :oops: :
Код: Выделить всёРазвернуть
 macro M_CA_VolUp
CA_VolUp:  бла-бла-бла
           бла-бла-бла
           ret
endm

macro M_Printf
Printf:    бла-бла-бла
           ret
endm

macro M_ЦЫ_должен_умереть!
ЦЫ_должен_умереть!:
           бла-бла-бла
           рет
endm

Ну и в самом теле проги:
Код: Выделить всёРазвернуть
      M_CA_VolUp  ;обьявление только нужных подпрограмм
      M_Printf    ;

main: call CA_VolUp
      rjmp main

В макросах можно не париться с одинаковыми названиями меток, почитай про локальные метки в макросах в соотв. доке.

Добавлено спустя 7 минут 48 секунд:
Да, и в макросы можно передавать параметры, в общем, аля сишные функции :)
Последний раз редактировалось Dmitry__ 29 янв 2012, 02:47, всего редактировалось 1 раз.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: MEGA16 startup

Сообщение exx » 29 янв 2012, 02:26

вариант! :good:
спасибки.
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Re: MEGA16 startup

Сообщение Dmitry__ » 29 янв 2012, 02:38

опс, ошибки в посте с макросами :oops:
пойду править...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: MEGA16 startup

Сообщение exx » 29 янв 2012, 15:24

главное затея,а остальное - порешаем :wink:
Аватара пользователя
exx
 
Сообщения: 53
Зарегистрирован: 25 дек 2008, 04:43
Откуда: Львов
прог. языки: c,asm

Пред.

Вернуться в Электроника, электротехника

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65