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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SDCC
sergey sva
сообщение Aug 11 2008, 13:06
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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
но что то мне это не чего не говорит, может кому приходилось это настраивать, помоги настроить пожалуйста.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 11 2008, 13:47
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 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)
и там всё что надо проинициализировать.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 11 2008, 15:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 11 2008, 16:05
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 11 2008, 16:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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

благодарю, прочитаю обязательно smile.gif
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 20 2008, 13:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 20 2008, 16:07
Сообщение #7


фанат дивана
******

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



Из main.c генерится main.asm, потом он транслируется в main.rel.
А crtstart - он уже и так .asm, потому из него делается сразу crtstart.rel.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 20 2008, 16:39
Сообщение #8


Гуру
******

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



Цитата(AHTOXA @ Aug 20 2008, 20:07) *
Из main.c генерится main.asm, потом он транслируется в main.rel.
А crtstart - он уже и так .asm, потому из него делается сразу crtstart.rel.


Понятно. smile.gif Еще есть проблемка в crtstart.asm Есть строка mov 0x8e , #0x10.
Записываю в регистр 0x8e значение 0x10.(Во время инициализации)
После в программе вывожу на дисплей значение этого регистра, содержание его 0x80 вместо 0x10.
функция которая выводит на дисплей работает нормально, проверял. Сегодня целый день
провозился уже не знаю где искать. Может что в hex можно увидеть.
Прикрепленные файлы
Прикрепленный файл  hex.zip ( 7.72 килобайт ) Кол-во скачиваний: 42
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 20 2008, 18:45
Сообщение #9


фанат дивана
******

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



А что это за регистр такой?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 21 2008, 13:15
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Aug 25 2008, 06:49
Сообщение #11


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

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



В документации на sdcc написано, что _sdcc_external_startup(), о которой писал AHTOXA, как раз и предназначена для инициализации памяти. Если это можно сделать на Си, зачем писать на ассемблере?
Код
int _sdcc_external_startup(void)
{
    AUXR = XRS2;
    return 0;
}


Цитата
Проблема вот какая: если размер XRAM превышает 256,байт , то программа зависает.

До main доходит, или раньше зависает?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 28 2008, 06:50
Сообщение #12


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Господа!
Если кому не в напряг, выложите, пожалуйста, пример makefile для SDCC с прикручиванием его к MPLAB. А то какой-то капризный этот mpasmwin...
Go to the top of the page
 
+Quote Post
msalov
сообщение Oct 28 2008, 08:01
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 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"
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 28 2008, 09:50
Сообщение #14


;
******

Группа: Участник
Сообщений: 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) в линуксоидном формате и начинает рассказывать, что файл не найден. Попытка заставить асм взять файл из текущей директории - те же яйца. В общем, только с полными путями. Как проще всего слеши поменять ?
Go to the top of the page
 
+Quote Post
msalov
сообщение Oct 28 2008, 11:06
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 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
Сам не пробовал, так что если не заработает - извините.
Go to the top of the page
 
+Quote Post

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

 


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


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