Отговори на тема  [ 57 мнения ]  Отиди на страница Предишна  1, 2, 3, 4
Macraigor USB Wiggler 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Благодаря за линка.

Някак си успях да се справя с линкерския файл, как точно, и аз не знам :) Използвам следното в линкерския файл:

Код:

/*************************************************************************
* Memory Regions
*
* Memory regions without attributes cannot be used for orphaned sections.
* Only sections specifically assigned to these regions can be allocated
* into these regions.
*************************************************************************/
MEMORY
{
  kseg0_program_mem    (rx)  : ORIGIN = 0x9D000000, LENGTH = 0x80000
  kseg0_boot_mem             : ORIGIN = 0x9FC00490, LENGTH = 0x970
  exception_mem              : ORIGIN = 0x9FC01000, LENGTH = 0x1000
  kseg1_boot_mem             : ORIGIN = 0xBFC00000, LENGTH = 0x490
  debug_exec_mem             : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
  config3                    : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
  config2                    : ORIGIN = 0xBFC02FF4, LENGTH = 0x4
  config1                    : ORIGIN = 0xBFC02FF8, LENGTH = 0x4
  config0                    : ORIGIN = 0xBFC02FFC, LENGTH = 0x4
  kseg1_data_mem       (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x20000
  sfrs                       : ORIGIN = 0xBF800000, LENGTH = 0x100000
  configsfrs                 : ORIGIN = 0xBFC02FF0, LENGTH = 0x10
}


_RESET_ADDR              = 0xBFC00000; /* PIC32 Virtual address ! Physical is 0x1FC0_0000 */

SECTIONS
{
  /* Boot Sections */
  .reset _RESET_ADDR :
  {
    KEEP(*(.reset))
  } > kseg1_boot_mem


а в "C" файла имам следния код:

Код:
#include "mips_compiler.h"
#include <p32xxxx.h>      // PIC32MX795F512L

void __attribute__ ((section (".reset"))) _reset(void) {

}


При това положение моята _reset() функция GNU C/C++ MIPS компилатора я зарежда на правилния адрес.


Но сега пък започнаха нови приключения :( Искам да използвам оригиналния crt0 файл на Microchip, обаче
MIPS C/C++ асемблера не иска да го компилира. Направи ми впечатление, че формата на асемблера е различен
при двата toolchain-a, на Microchip е опростен и изглежда така:

Код:
#include <p32xxxx.h>
#ifdef __LIBBUILD__
   .file 1 "crt0.S"
   .loc 1 0
#endif
        ##################################################################
        # Entry point of the entire application
        ##################################################################
        .section .reset,"ax",@progbits
        .set noreorder
        .ent _reset
_reset:
        la      k0, _startup
        jr      k0                      # Jump to startup code
        nop
 
        .end _reset
        .globl _reset

        ##################################################################
        # Startup code
        ##################################################################
        .section .startup,"ax",@progbits
        .set noreorder
        .ent _startup
_startup:
        ##################################################################
        # If entered because of an NMI, jump to the NMI handler.
        ##################################################################
        mfc0    k0,_CP0_STATUS
        ext     k0,k0,19,1              # Extract NMI bit
        beqz    k0,_no_nmi
        nop
        la      k0,_nmi_handler
        jr      k0
        nop
_no_nmi:

        ##################################################################
        # Initialize Stack Pointer
        #   _stack is initialized by the linker script to point to the
        #    starting location of the stack in DRM
        ##################################################################
        la      sp,_stack

        ##################################################################
        # Initialize Global Pointer
        #   _gp is initialized by the linker script to point to "middle"
        #   of the small variables region
        ##################################################################
        la      gp,_gp
       
        ##################################################################
        # Initialize Global Pointer in Shadow Set
        #   The SRSCtl's PSS field must be set to the shadow set in which
        #   to initialize the global pointer.  Since we only have a
        #   single shadow set (besides the normal), we will initialize
        #   SRSCtl<PSS> to SRSCtl<HSS>.  We then write the global pointer
        #   to the previous shadow set to ensure that on interrupt, the
        #   global pointer has been initialized.
        ##################################################################
        mfc0    t1,_CP0_SRSCTL          # Read SRSCtl register
        add     t3,t1,zero              # Save off current SRSCtl
        ext     t2,t1,26,4              # to obtain HSS field
        ins     t1,t2,6,4               # Put HSS field
        mtc0    t1,_CP0_SRSCTL          # into SRSCtl<PSS>
        wrpgpr  gp,gp                   # Set global pointer in PSS
        mtc0    t3,_CP0_SRSCTL          # Restore SRSCtl

        ##################################################################
        # Call the "on reset" procedure
        ##################################################################
        la      t0,_on_reset
        jalr    t0
        nop

        ##################################################################
        # Clear uninitialized data sections
        ##################################################################
        la      t0,_bss_begin
        la      t1,_bss_end
        b       _bss_check
        nop

_bss_init:     
        sw      zero,0x0(t0)
        sw      zero,0x4(t0)
        sw      zero,0x8(t0)
        sw      zero,0xc(t0)
        addu    t0,16
_bss_check:
        bltu    t0,t1,_bss_init
        nop
       
        ##################################################################
        # Copy initialized data from program flash to data memory
        #   src=_data_image_begin dst=_data_begin stop=_data_end
        ##################################################################
        la      t0,_data_image_begin
        la      t1,_data_begin
        la      t2,_data_end
        b       _init_check
        nop

_init_data:     
        lw      t3,(t0)
        sw      t3,(t1)
        addu    t0,4
        addu    t1,4
_init_check:
        bltu    t1,t2,_init_data
        nop

        ##################################################################
        # If there are no RAM functions, skip the next two sections --
        # copying RAM functions from program flash to data memory and
        # initializing bus matrix registers.
        ##################################################################
        la      t1,_ramfunc_length
        beqz    t1,_ramfunc_done
        nop

        ##################################################################
        # Copy RAM functions from program flash to data memory
        #   src=_ramfunc_image_begin dst=_ramfunc_begin stop=_ramfunc_end
        ##################################################################
        la      t0,_ramfunc_image_begin
        la      t1,_ramfunc_begin
        la      t2,_ramfunc_end

_init_ramfunc: 
        lw      t3,(t0)
        sw      t3,(t1)
        addu    t0,4
        addu    t1,4
_ramfunc_check:
        bltu    t1,t2,_init_ramfunc
        nop

        ##################################################################
        # Initialize bus matrix registers if RAM functions exist in the
        # application
        ##################################################################
        la      t1,_bmxdkpba_address
        la      t2,BMXDKPBA
        sw      t1,0(t2)
        la      t1,_bmxdudba_address
        la      t2,BMXDUDBA
        sw      t1,0(t2)
        la      t1,_bmxdupba_address
        la      t2,BMXDUPBA
        sw      t1,0(t2)
_ramfunc_done:

        ##################################################################
        # Initialize CP0 registers
        ##################################################################
        # Initialize Count register
        ##################################################################
        mtc0    zero,_CP0_COUNT

        ##################################################################
        # Initialize Compare register
        ##################################################################
        li      t2,-1
        mtc0    t2,_CP0_COMPARE

        ##################################################################
        # Initialize EBase register
        ##################################################################
        la      t1,_ebase_address
        mtc0    t1,_CP0_EBASE

        ##################################################################
        # Initialize IntCtl register
        ##################################################################
        la      t1,_vector_spacing
        li      t2,0                    # Clear t2 and
        ins     t2,t1,5,5               # shift value to VS field
        mtc0    t2,_CP0_INTCTL

        ##################################################################
        # Initialize CAUSE registers
        # - Enable counting of Count register <DC = 0>
        # - Use special exception vector <IV = 1>
        # - Clear pending software interrupts <IP1:IP0 = 0>
        ##################################################################
        li      t1,0x00800000
        mtc0    t1,_CP0_CAUSE

        ##################################################################
        # Initialize STATUS register
        # - Access to Coprocessor 0 not allowed in user mode <CU0 = 0>
        # - User mode uses configured endianness <RE = 0>
        # - Preserve Bootstrap Exception vectors <BEV>
        # - Preserve soft reset <SR> and non-maskable interrupt <NMI>
        # - CorExtend enabled based on whether CorExtend User Defined
        #   Instructions have been implemented <CEE = Config<UDI>>
        # - Disable any pending interrups <IM7..IM2 = 0, IM1..IM0 = 0>
        # - Disable hardware interrupts <IPL7:IPL2 = 0>
        # - Base mode is Kernel mode <UM = 0>
        # - Error level is normal <ERL = 0>
        # - Exception level is normal <EXL = 0>
        # - Interrupts are disabled <IE = 0>
        ##################################################################
        mfc0    t0,_CP0_CONFIG
        ext     t1,t0,22,1              # Extract UDI from Config register
        sll     t1,t1,17                # Move UDI to Status.CEE location
        mfc0    t0,_CP0_STATUS
        and     t0,t0,0x00580000        # Preserve SR, NMI, and BEV
        or      t0,t1,t0                # Include Status.CEE (from UDI)
        mtc0    t0,_CP0_STATUS

        ##################################################################
        # Call the "on bootstrap" procedure
        ##################################################################
        la      t0,_on_bootstrap
        jalr    t0
        nop

        ##################################################################
        # Initialize Status<BEV> for normal exception vectors
        ##################################################################
        mfc0    t0,_CP0_STATUS
        and     t0,t0,0xffbfffff        # Clear BEV
        mtc0    t0,_CP0_STATUS

        ##################################################################
        # Call main. We do this via a thunk in the text section so that
        # a normal jump and link can be used, enabling the startup code
        # to work properly whether main is written in MIPS16 or MIPS32
        # code. I.e., the linker will correctly adjust the JAL to JALX if
        # necessary
        ##################################################################
        and     a0,a0,0
        and     a1,a1,0
        la      t0,_main_entry
        jr      t0
        nop

       
        .end _startup

        ##################################################################
        # Boot Exception Vector Handler
        # Jumps to _bootstrap_exception_handler
        ##################################################################
        .section .bev_handler,"ax",@progbits
        .set noreorder
        .ent _bev_exception
_bev_exception:
        la      k0,_bootstrap_exception_handler
        jr      k0
        nop

        .end _bev_exception
                       
        ##################################################################
        # General Exception Vector Handler
        # Jumps to _general_exception_handler
        ##################################################################
        .section .gen_handler,"ax",@progbits
        .set noreorder
        .ent _gen_exception
_gen_exception:
        la      k0,_general_exception_context
        jr      k0
        nop

        .end _gen_exception


        .text
        .ent _main_entry
_main_entry:
        ##################################################################
        # Call main
        ##################################################################
        jal main
        nop

        ##################################################################
        # Call exit
        ##################################################################
        jal    exit
        nop

        ##################################################################
        # Just in case, go into infinite loop
        ##################################################################
1:
        b       1b
        nop
        .end _main_entry



а GNU C/C++ MIPS изисква като че ли нещо от рода на asm volatile ( "__opcode .... " ) , ама не съм сигурен, че
иска точно това, защото нямам нито един оригинален сорс код на асемблер идващ с MIPS компилатора,
всичко е вкарано в библиотеки и не мога да намеря къде са публикували синтаксиса на асемблера си ( то
не че Microchip са публикували нещо свястно ).

Та питанката ми е има ли някаква опция/трик с която да накарам GNU C/C++ MIPS асемблера да възприеме синтаксиса
на асемблера на Microchip ? Другото е да взема да вкарам crt кода в "C" файл, обаче пак не ми е ясен синтаксиса на
асемблера, т.я. тия думи asm volatile ("__opcode" ) никъде не намирам да са обяснени, колкото до opcode все ще се справя
някак си.


Май само това остана да преборя преди да имам първия работещ код за PIC32 изгенериран
от не Microchip-ски компилатор.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Сря Мар 16, 2011 7:43 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Оф, асемблира се кода най-накрая :D

И то какво му беше: crt0.S е файла, а аз в Makefile съм го записал като crt0.s като не съм забелязал разликата.
Когато разширението е с малка буква 's' GNU C/C++ не ще да го асемблира, плюе само съобщения за недефинирани символи във файла crt0.s, когато го напиша правилно с голяма буква 'S'
се асемблира... Сега се сещам, че навремето четох че имало разлика между двата записа...

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Сря Мар 16, 2011 10:01 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
¶ написа:
Сега се сещам, че навремето четох че имало разлика между двата записа...

Едното минава през препроцесор, другото - не.


Чет Мар 17, 2011 12:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
¶ написа:
И то какво му беше: crt0.S е файла, а аз в Makefile съм го записал като crt0.s като не съм забелязал разликата.
...


Оф нямам нищо общо с тия gcc mcc и подобни ама всяко напомняне за _тая_ тъпотия в юникса,
дето имената се интерпретират case dependent направо ми натиска червния бутон. Такава идиотия
толкова десетилетия се влачи - само щото първоначалния автор си е поспестил някоя минута
програмиране.

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Чет Мар 17, 2011 6:02 pm
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Мар 18, 2011 6:44 am
Мнения: 1
Мнение 
tgi написа:
¶ написа:
И то какво му беше: crt0.S е файла, а аз в Makefile съм го записал като crt0.s като не съм забелязал разликата.
...


Оф нямам нищо общо с тия gcc mcc и подобни ама всяко напомняне за _тая_ тъпотия в юникса,
дето имената се интерпретират case dependent направо ми натиска червния бутон. Такава идиотия
толкова десетилетия се влачи - само щото първоначалния автор си е поспестил някоя минута
програмиране.


Да, защото твоята система е световно известна и призната и ти си майката и бащата на всички операционни системи и програмиране изобщо.
Бог да пази tgi и Motorola, че измислиха PowerPC, единствения процесор достоен да работи в продуктите на trans galactic instruments, които, както всички заем, са светлинни години напред. Чак да се чуди човек защо се занимават с нас и разните ни дискусии неотнасящи се за ДеПеСе и PowerPC и котките в офиса на tgi.


Пет Мар 18, 2011 6:53 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение 
И само да напсуваш човека специално си направи регистрация?
Хайде съвземи се малко, да го чуеш само как псува Windows и политиците, няма да можеш да спиш една седмица.
Лош трол, лош.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Мар 18, 2011 7:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
ike написа:
И само да напсуваш човека специално си направи регистрация?
Хайде съвземи се малко, да го чуеш само как псува Windows и политиците, няма да можеш да спиш една седмица.
Лош трол, лош.


:D :D :D :D :D

А съм и уморен и изнервен вече след цяла нощ копане .... :D :D :D

Предполагал е обаче, та си е направил анонимната регистрация човекът - видимо е от постоянните :D :D

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Пет Мар 18, 2011 7:42 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Не съм аз :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Мар 18, 2011 11:09 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Яну 24, 2006 6:34 pm
Мнения: 1753
Местоположение: Варна
Мнение 
Цитат:
... защото твоята система е световно известна... trans galactic instruments... и котките в офиса на tgi
.. специално си направи регистрация? ...Лош трол, лош.
...А съм и уморен и изнервен вече след цяла нощ копане ....
=D>

_________________
За пари сичко праим,даже и работим...


Пет Мар 18, 2011 10:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
То е много лесно да се разбере кой е, просто Реконструктора трябва да провери IP адресите и ще се поразбере това и онова :D

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Мар 18, 2011 10:52 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
Аре бе, много шум за нищо. Не е някой дето си приказваме ежедневно, а който и да е
всъщност проявата на ядяща го отвътре злоба си е изцяло само в негова вреда, да го
оставим на мира. Ако има някой дето очевидно да не може да е е Цецо де, той май е
неспособен на злоба по дизайн, доколкото съм го опознал :-) . Естествено не е само той
такъв ама нали се обади та го споменавам.

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Пет Мар 18, 2011 11:25 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
tgi, чест ти прави, че подминваш така лапешкото изказване по твой адрес (троле :P ) но това май е първият случай, в който постоянен за форума човек надига така грубо глас срещу друг редовен (при това от висок ранг) потребител. Нещо и инДжИнерите сме взели да се озлобяваме, а? Тая криза не прощава! Колеги, утре да не срещна някой от вас излезнал на лов с винкел в ръка и геврек в другата?
Рек, изтопосай го тоя индивид на яве, интересно ми стана на кой му е превъртяла гайката, та да прави такива тинейджърски глупости?


Съб Мар 19, 2011 12:05 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 57 мнения ]  Отиди на страница Предишна  1, 2, 3, 4

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни