roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 07:35

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 27 янв 2012, 13:54 
Не в сети
Аватара пользователя

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

Заинсталил AVRStudio5 - красота! Понравилась до немогу (привычная очень = клон MSVS). Создал прож, все кул. Но есть момнент непонимания ассемблера - хочу несколько файлов использовать, т.е. часть кода в одном файле, часть в другом и call-ать себе с одного файла другой. Файлы то добавлять не сложно в проект - а как собственно сделать функу и её прототип в *.inc дабы не орало "unresolved symbol" ???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 27 янв 2012, 20:52 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 00:28 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 00:43 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 13:45 
Не в сети
Аватара пользователя

Зарегистрирован: 25 дек 2008, 04:43
Сообщения: 53
Откуда: Львов
прог. языки: c,asm
есть два подключенных к прожекту файла: 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 а как тут = хз(

собственно вопрос состоит в том - как студию попросить перестать матерится?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 17:09 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Попробую угадать с 3-х нот :)
ставить "AVR Studio 5,для жуков" ради проверки не готов...

В "Мейн файлик" есть "#include io_layer.asm" ?
Если есть, то он до вызова "call CA_VolUp" или после?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 20:48 
Не в сети
Аватара пользователя

Зарегистрирован: 25 дек 2008, 04:43
Сообщения: 53
Откуда: Львов
прог. языки: c,asm
был инклюд 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:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 22:07 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 22:11 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
дык, у тебя .include "io_layer.asm" воткнут до:
Код:
.cseg
.cseg    ;выбор сегмента программного кода
.org 0   ;установка текущего адреса на ноль                       


Он тебе пытается собрать прогу в отрицательных адресах :)
тыкай его после: rjmp main
А вот если после этого ругнется: "Undefined symbol: CA_VolUp"
то тыкай его прямо перед "main:"
И после этого должен перестать ругаться.
А вот если тебе нендравица инклуды в сегменте кода, то будем делать бантики :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 28 янв 2012, 23:40 
Не в сети
Аватара пользователя

Зарегистрирован: 25 дек 2008, 04:43
Сообщения: 53
Откуда: Львов
прог. языки: c,asm
спасибо, друзья - все норм = переместил .include "io_layer.asm" в конец файла и поехало.
Дмитрий, а как с бантиками, можно их поглядеть? :)

*может можно както сделать
.org SIZEOF(io_layer.asm)
?)
а еще лучше попросить линкер както самому разместить код в нужном порядке, хотя подозреваю с МК такого не получится(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 29 янв 2012, 02:07 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
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 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 29 янв 2012, 02:26 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 29 янв 2012, 02:38 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MEGA16 startup
СообщениеДобавлено: 29 янв 2012, 15:24 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO