|
SDCC |
|
|
|
Aug 11 2008, 13:06
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Сейчас пишу програмку для мк 89с51ed2, память у него конфигурируется в регистре AUXR и может быть 768 1024 1792. Когда писал программу под KEIL там был файл Startup.asm в нем после метки Startup: можно было настроить все что нужно. В SDCC файл есть main.asm но если в него добавить что то то, после компиляции все равно будет сгенерирован новый main.asm а этот заменяется. на сайте sdcc есть что то по настройке, startup http://sdcc.sourceforge.net/doc/sdccman.html/node78.htmlно что то мне это не чего не говорит, может кому приходилось это настраивать, помоги настроить пожалуйста.
|
|
|
|
|
Aug 11 2008, 13:47
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Там же в конце написано: Цитата The recommended way would be to copy crtstart.asm (f.e. from http://sdcc.svn.sourceforge.net/viewvc/*ch...1/crtstart.asm) into the source directory, adapt it there, then assemble it with asx8051 -plosgff3.4 crtstart.asm and when linking your project explicitely specify crtstart.rel. As a bonus a listing of the relocated object file crtstart.rst is generated. Перевожу: скопировать crtstart.asm себе в проект, исправить, ассемблировать его в rel и слинковать со своим проектом. Или другой вариант (проще, но не уверен что прокатит): объявить в своей программе ф-ю int _sdcc_external_startup(void) и там всё что надо проинициализировать.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 11 2008, 15:01
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
скопировал crtasm.asm в директорию source, добавил все настройки в него. теперь нужно получить объектный файл и после его откомпилировать(если ошибаюсь поправьте) Вот макефиле только почемуто не создается crtstart.rel Код СC=sdcc as=asx8051 LINKFLAGS=--model-large --code-loc 0x0000 --code-size 0xFFFF --xram-loc 0x0000 --xram-size 0x0700 all: main.hex
main.rel: main.c $(CC) $(LINKFLAGS)-c main.c crtstart.rel: crtstart.asm $(as) o crtstart.asm
main.hex: main.rel $(CC) $(LINKFLAGS) main.rel crtstart.rel packihx <main.ihx>main.hex
clean:
@del *.hex *.ihx *.lnk *.mem *.rel *.rst *.sym *.lst *.map
|
|
|
|
|
Aug 11 2008, 16:05
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(sergey sva @ Aug 11 2008, 21:01)  Вот макефиле только почемуто не создается crtstart.rel Вы так и не почитали ничего про make? Я понимаю, англицкий выучить - дело долгое. Но разобраться в основах make - дело пары вечеров! Вот ссылка, почитайте третью главу, там всё хорошо описано. А crtstart.rel не создаётся потому, что не прописана зависимость main.hex от него: Код main.hex: main.rel crtstart.rel
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 11 2008, 16:12
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(AHTOXA @ Aug 11 2008, 20:05)  Вы так и не почитали ничего про make? Я понимаю, англицкий выучить - дело долгое. Но разобраться в основах make - дело пары вечеров! Вот ссылка, почитайте третью главу, там всё хорошо описано. А crtstart.rel не создаётся потому, что не прописана зависимость main.hex от него: Код main.hex: main.rel crtstart.rel благодарю, прочитаю обязательно
|
|
|
|
|
Aug 20 2008, 13:25
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Информацию по make и makefile, прочел вроде понятно. Вот что в доке написано, вроде так и делаю. Цитата While these initialization modules are meant as generic startup code there might be the need for customization. Let’s assume the return value of _sdcc_external_startup() in crtstart.asm should not be checked (or _sdcc_external_startup() should not be called at all). The recommended way would be to copy crtstart.asm (f.e. from http://sdcc.svn.sourceforge.net/viewvc/*ch...vice/lib/mcs51/crtstart.asm) into the source directory, adapt it there, then assemble it with asx8051 -plosgff 4 crtstart.asm and when linking your project explicitely specify crtstart.rel. As a bonus a listing of the relocated object file crtstart.rst is generated. Вот makefile : Код CC=sdcc AS=asx8051 LINKFLAGS=--model-large --code-loc 0x0000 --code-size 0xFFFF --xram-loc 0x0000 --xram-size 0x0700 all: main.hex main.rel: main.c $(CC) $(LINKFLAGS) -c main.c
crtstart.rel: crtstart.asm $(AS) -plosgff crtstart.asm
main.hex: main.rel crtstart.rel $(CC) $(LINKFLAGS) main.rel crtstart.rel packihx <main.ihx>main.hex
clean:
@del *.hex *.ihx *.lnk *.mem *.rel *.rst *.sym *.lst *.map Все компилится получается хекс, но только просматриваю сгенерированный файл main.asm он должен получится из двух объектных файлов main.rel crtstart.rel а там только от main.rel может что не так сделал в макефайле ?
Сообщение отредактировал sergey sva - Aug 20 2008, 13:44
Прикрепленные файлы
asm.zip ( 14.16 килобайт )
Кол-во скачиваний: 33
|
|
|
|
|
Aug 20 2008, 16:39
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(AHTOXA @ Aug 20 2008, 20:07)  Из main.c генерится main.asm, потом он транслируется в main.rel. А crtstart - он уже и так .asm, потому из него делается сразу crtstart.rel. Понятно.  Еще есть проблемка в crtstart.asm Есть строка mov 0x8e , #0x10. Записываю в регистр 0x8e значение 0x10.(Во время инициализации) После в программе вывожу на дисплей значение этого регистра, содержание его 0x80 вместо 0x10. функция которая выводит на дисплей работает нормально, проверял. Сегодня целый день провозился уже не знаю где искать. Может что в hex можно увидеть.
Прикрепленные файлы
hex.zip ( 7.72 килобайт )
Кол-во скачиваний: 42
|
|
|
|
|
Aug 21 2008, 13:15
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(AHTOXA @ Aug 20 2008, 22:45)  А что это за регистр такой? Регистр AUXR в нем настраивается размер памяти XRAM 256 512 768 1024 или 1792. Сегодня с утра посмотрел на код и сразу дошло, что на дисплее информация int а 0х10 это hex, еще в этом регистре есть бит который зарезервирован и читается как 1; поэтому записываю 0х10 а получается 0х50. Но проблема еще не решена, просто я не там искал. Проблема вот какая: если размер XRAM превышает 256,байт , то программа зависает. На самом деле должна работать до 1792. отрывок из документации в зипе. makefile Код CC=sdcc AS=asx8051 LINKFLAGS=--model-large --code-loc 0x0000 --code-size 0xFFFF --xram-loc 0x0000 --xram-size 0x0700 all: main.hex main.rel: main.c $(CC) $(LINKFLAGS) -c main.c
crtstart.rel: crtstart.asm $(AS) -plosgff crtstart.asm
main.hex: main.rel crtstart.rel $(CC) $(LINKFLAGS) main.rel crtstart.rel packihx <main.ihx>main.hex
clean:
@del *.hex *.ihx *.lnk *.mem *.rel *.rst *.sym *.lst *.map main.mem Код Internal RAM layout: 0 1 2 3 4 5 6 7 8 9 A B C D E F 0x00:|0|0|0|0|0|0|0|0|a|b|b|b|b|b|b|Q| 0x10:|Q|Q| | | | | | | | | | | | | | | 0x20:|B|B|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x80:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0x90:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xa0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xb0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xc0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xd0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xe0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S| 0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
Stack starts at: 0x22 (sp set to 0x21) with 222 bytes available.
Other memory: Name Start End Size Max ---------------- -------- -------- -------- -------- PAGED EXT. RAM 0 256 EXTERNAL RAM 0x0000 0x0151 338 1792 ROM/EPROM/FLASH 0x0000 0x1dd6 7639 65535
Прикрепленные файлы
Doc1.zip ( 308.24 килобайт )
Кол-во скачиваний: 64
|
|
|
|
|
Aug 25 2008, 06:49
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415

|
В документации на sdcc написано, что _sdcc_external_startup(), о которой писал AHTOXA, как раз и предназначена для инициализации памяти. Если это можно сделать на Си, зачем писать на ассемблере? Код int _sdcc_external_startup(void) { AUXR = XRS2; return 0; } Цитата Проблема вот какая: если размер XRAM превышает 256,байт , то программа зависает. До main доходит, или раньше зависает?
|
|
|
|
|
Oct 28 2008, 08:01
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(_Pasha @ Oct 28 2008, 08:50)  Господа! Если кому не в напряг, выложите, пожалуйста, пример makefile для SDCC с прикручиванием его к MPLAB. А то какой-то капризный этот mpasmwin... Что может быть проще. Берите пример проекта в MPLAB-е и экспортируйте мейкфайл. Код # MPLAB IDE generated this makefile for use with GNU make. # Project: MCHPUSB.mcp # Date: Tue Oct 28 09:57:19 2008
AS = mpasmwin.exe CC = mcc18.exe LD = mplink.exe AR = mplib.exe RM = rm
MCHPUSB.cof : usbmmap.o usbdrv.o usb9.o usbdsc.o usbctrltrf.o user.o cdc.o crc.o settings.o cmd.o time.o ftoa.o history.o main_usb.o flash.o btobcd.o itobcd.o ltobcd.o button_lang.o Calculation_DER_DE.o lcd.o main.o menu.o menu_lang.o mkstr.o sound.o StateParent.o t1read.o t1write.o t3write.o upvv.o sysparams.o _time.o $(LD) /p18F67J50 /l"C:\MCC18\lib" /k"C:\MCC18\lkr" "usbmmap.o" "usbdrv.o" "usb9.o" "usbdsc.o" "usbctrltrf.o" "user.o" "cdc.o" "crc.o" "settings.o" "cmd.o" "time.o" "ftoa.o" "history.o" "main_usb.o" "flash.o" "btobcd.o" "itobcd.o" "ltobcd.o" "button_lang.o" "Calculation_DER_DE.o" "lcd.o" "main.o" "menu.o" "menu_lang.o" "mkstr.o" "sound.o" "StateParent.o" "t1read.o" "t1write.o" "t3write.o" "upvv.o" "sysparams.o" "_time.o" /u_CRUNTIME /u_DEBUG /u_DEBUGDATASTART=0xef4 /u_DEBUGDATALEN=0xc /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /z__MPLAB_DEBUGGER_ICD2=1 /z__ICD2RAM=1 /m"MCHPUSB.map" /w /o"MCHPUSB.cof"
usbmmap.o : system/usb/usbmmap.c system/usb/class/cdc/cdc.h system/usb/usbdrv/usbdrv.h system/usb/usbmmap.c system/typedefs.h system/usb/usb.h autofiles/usbcfg.h system/usb/usbdefs/usbdefs_std_dsc.h autofiles/usbdsc.h system/usb/usbdefs/usbdefs_ep0_buff.h system/usb/usbmmap.h system/usb/usbctrltrf/usbctrltrf.h system/usb/usb9/usb9.h $(CC) -p=18F67J50 /i"C:\MCC18\h" "system\usb\usbmmap.c" -fo="usbmmap.o" -D__DEBUG -k -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
.......
clean : $(RM) "usbmmap.o" "usbdrv.o" "usb9.o" "usbdsc.o" "usbctrltrf.o" "user.o" "cdc.o" "crc.o" "settings.o" "cmd.o" "time.o" "ftoa.o" "history.o" "main_usb.o" "flash.o" "btobcd.o" "btobcd.ERR" "btobcd.lst" "itobcd.o" "itobcd.ERR" "itobcd.lst" "ltobcd.o" "ltobcd.ERR" "ltobcd.lst" "button_lang.o" "Calculation_DER_DE.o" "lcd.o" "main.o" "menu.o" "menu_lang.o" "mkstr.o" "sound.o" "StateParent.o" "t1read.o" "t1write.o" "t3write.o" "upvv.o" "sysparams.o" "_time.o" "MCHPUSB.cof" "MCHPUSB.hex" "MCHPUSB.map"
|
|
|
|
|
Oct 28 2008, 09:50
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(gotty @ Oct 28 2008, 11:01)  Что может быть проще. Берите пример проекта в MPLAB-е и экспортируйте мейкфайл. У меня после компилера SDCC получается асмовый файл. Далее - асм и линкер мплабовский. Проблема в том, что я выдрал где-то такой файл, и начал его переделывать Код PIC = 18f2431
NAME = MControl PRJDIR = $(CURDIR) SDCCDIR = C:/sdcc
SRC = main.c SRCASM = INCLUDE = -I$(SDCCDIR)/include/pic16
CC = $(SDCCDIR)/bin/sdcc ASM = "C:/Program Files/Microchip/MPASM Suite/"mpasmwin.exe LOAD = # #Note : rewrited for use with mpasmwin in command line mode #ASMFLAGS = -c ASMFLAGS = /c+ /m+ /o+ CFLAGS = -mpic16 -p$(PIC) LDFLAGS = $(CFLAGS) -l libc18f.lib OBJS = $(patsubst %.c,%.o,$(SRC)) $(patsubst %.asm,%.o,$(SRCASM)) LSTS = $(patsubst %.c,%.lst,$(SRC)) $(patsubst %.asm,%.lst,$(SRCASM)) ASMS = $(patsubst %.c,%.asm,$(SRC))
all: $(NAME).hex
$(NAME).hex : $(OBJS) $(SRC) $(SRCASM) @echo -n "Linking ... " @$(CC) -o $@ $(LDFLAGS) $(OBJS) @ls -l $@ @echo "done"
%.o: %.asm @echo "Assembling ... $<" $(ASM) $(ASMFLAGS) $(PRJDIR)/$<
%.o: %.c @echo "Compiling ... $<" @$(CC) $(INCLUDE) $(CFLAGS) -S -c $< @$(ASM) $(ASMFLAGS) $*.asm
clean : @rm -f $(ASMS) $(LSTS) $(OBJS) $(NAME).lst $(NAME).hex $(NAME).cod За линкер просьба не пинать - я до него еще не дошел. Короче, при вызове $(ASM) $(ASMFLAGS) $(PRJDIR)/$< ,mpasmwin получает в командную строку путь $(PRJDIR) в линуксоидном формате и начинает рассказывать, что файл не найден. Попытка заставить асм взять файл из текущей директории - те же яйца. В общем, только с полными путями. Как проще всего слеши поменять ?
|
|
|
|
|
Oct 28 2008, 11:06
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(_Pasha @ Oct 28 2008, 11:50)  У меня после компилера SDCC получается асмовый файл. Далее - асм и линкер мплабовский. Проблема в том, что я выдрал где-то такой файл, и начал его переделывать
За линкер просьба не пинать - я до него еще не дошел.
Короче, при вызове $(ASM) $(ASMFLAGS) $(PRJDIR)/$< ,mpasmwin получает в командную строку путь $(PRJDIR) в линуксоидном формате и начинает рассказывать, что файл не найден. Попытка заставить асм взять файл из текущей директории - те же яйца. В общем, только с полными путями. Как проще всего слеши поменять ? А может имеет смысл использовать все инструменты из одного комплекта? Первая ссылка на запрос в гугле "mplab using sdcc compiler" выводит на на http://lne.byexamples.com/?p=21Сам не пробовал, так что если не заработает - извините.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|