|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:23 am
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 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" файла имам следния код: При това положение моята _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 |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Оф, асемблира се кода най-накрая
И то какво му беше: crt0.S е файла, а аз в Makefile съм го записал като crt0.s като не съм забелязал разликата.
Когато разширението е с малка буква 's' GNU C/C++ не ще да го асемблира, плюе само съобщения за недефинирани символи във файла crt0. s, когато го напиша правилно с голяма буква 'S'
се асемблира... Сега се сещам, че навремето четох че имало разлика между двата записа...
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Мар 16, 2011 10:01 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
Едното минава през препроцесор, другото - не.
|
| Чет Мар 17, 2011 12:27 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Оф нямам нищо общо с тия gcc mcc и подобни ама всяко напомняне за _тая_ тъпотия в юникса,
дето имената се интерпретират case dependent направо ми натиска червния бутон. Такава идиотия
толкова десетилетия се влачи - само щото първоначалния автор си е поспестил някоя минута
програмиране.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Чет Мар 17, 2011 6:02 pm |
|
 |
|
pederast_dva_tri
Ранг: Минаващ
Регистриран на: Пет Мар 18, 2011 6:44 am Мнения: 1
|
Да, защото твоята система е световно известна и призната и ти си майката и бащата на всички операционни системи и програмиране изобщо.
Бог да пази tgi и Motorola, че измислиха PowerPC, единствения процесор достоен да работи в продуктите на trans galactic instruments, които, както всички заем, са светлинни години напред. Чак да се чуди човек защо се занимават с нас и разните ни дискусии неотнасящи се за ДеПеСе и PowerPC и котките в офиса на tgi.
|
| Пет Мар 18, 2011 6:53 am |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
И само да напсуваш човека специално си направи регистрация?
Хайде съвземи се малко, да го чуеш само как псува Windows и политиците, няма да можеш да спиш една седмица.
Лош трол, лош.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пет Мар 18, 2011 7:03 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Мар 18, 2011 7:42 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Не съм аз 
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Мар 18, 2011 11:09 am |
|
 |
|
mitko_el
Ранг: Форумен бог
Регистриран на: Вто Яну 24, 2006 6:34 pm Мнения: 1753 Местоположение: Варна
|
_________________ За пари сичко праим,даже и работим...
|
| Пет Мар 18, 2011 10:31 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
То е много лесно да се разбере кой е, просто Реконструктора трябва да провери IP адресите и ще се поразбере това и онова 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Мар 18, 2011 10:52 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Аре бе, много шум за нищо. Не е някой дето си приказваме ежедневно, а който и да е
всъщност проявата на ядяща го отвътре злоба си е изцяло само в негова вреда, да го
оставим на мира. Ако има някой дето очевидно да не може да е е Цецо де, той май е
неспособен на злоба по дизайн, доколкото съм го опознал  . Естествено не е само той
такъв ама нали се обади та го споменавам.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Мар 18, 2011 11:25 pm |
|
 |
|
head_up
Ранг: Форумен бог
Регистриран на: Нед Юни 01, 2008 9:54 pm Мнения: 1503 Местоположение: Пловдив
|
tgi, чест ти прави, че подминваш така лапешкото изказване по твой адрес (троле  ) но това май е първият случай, в който постоянен за форума човек надига така грубо глас срещу друг редовен (при това от висок ранг) потребител. Нещо и инДжИнерите сме взели да се озлобяваме, а? Тая криза не прощава! Колеги, утре да не срещна някой от вас излезнал на лов с винкел в ръка и геврек в другата?
Рек, изтопосай го тоя индивид на яве, интересно ми стана на кой му е превъртяла гайката, та да прави такива тинейджърски глупости?
|
| Съб Мар 19, 2011 12:05 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 6 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|