addi II 0 16 ноября, 2022 Опубликовано 16 ноября, 2022 · Жалоба Здравствуйте! Использую cygwin64 и mips-mti-elf-gcc.exe (Codescape GNU Tools 2017.10-08 for MIPS MTI Bare Metal) 6.3.0 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. И хотел использовать смещение относительно адреса секции прописанной в линкер скрипте PROVIDE(isr_start = 0xFFFFFFFFB500E000); _GEN_EXCPT_ADDR = 0x200 ; . = isr_start + _GEN_EXCPT_ADDR; .text.gen_handler : { _gen_handler_start = .; *(.text.gen_handler) *(.text.gen_handler.*) KEEP(*(.SW_VEC1_Vector)) KEEP(*(.CP0_TIM_VEC4_Handler)) _gen_handler_end = .; } .text.SW_VEC1_Vector : { _SW_VEC1_Vector_start = .; *(.text.SW_VEC1_Vector) *(.text.SW_VEC1_Vector.*) _SW_VEC1_Vector_end = .; } .text.CP0_TIM_VEC4_Vector : { _CP0_TIM_VEC4_Vector_start = .; *(.text.CP0_TIM_VEC4_Vector) *(.text.CP0_TIM_VEC4_Vector.*) _CP0_TIM_VEC4_Vector_end = .; } Смещение делаю с помощью .org .section .text.gen_handler .set noreorder .ent _SW_VEC1_vector _SW_VEC1_vector: .org+ 544 la k0, _SW_VEC1_handler beqz k0, _SW_VEC1_vector jr k0 nop nop .end _SW_VEC1_vector .section .text.gen_handler .set noreorder .ent _CP0_TIM_VEC4_vector _CP0_TIM_VEC4_vector: .org + 640 la k0, _CP0_TIM_VEC4_handler beqz k0, _CP0_TIM_VEC4_vector jr k0 nop nop .end _CP0_TIM_VEC4_vector В листинге нужного смещения не наблюдается Disassembly of section .text.gen_handler: ffffffffb500e200 <_gen_handler>: eret ffffffffb500e200: 42000018 eret nop ffffffffb500e204: 00000000 sll $0,$0,0x0 ffffffffb500e208 <_SW_VEC1_vector>: ... la k0, _SW_VEC1_handler ffffffffb500e420: 3c1a0000 lui $26,0x0 ffffffffb500e424: 3c01b501 lui $1,0xb501 ffffffffb500e428: 675a0000 daddiu $26,$26,0 ffffffffb500e42c: 6421e500 daddiu $1,$1,-6912 ffffffffb500e430: 001ad03c dsll32 $26,$26,0x0 ffffffffb500e434: 0341d02d daddu $26,$26,$1 beqz k0, _SW_VEC1_vector ffffffffb500e438: 1340ff73 beqz $26,ffffffffb500e208 <_SW_VEC1_vector> jr k0 ffffffffb500e43c: 03400008 jr $26 nop ffffffffb500e440: 00000000 sll $0,$0,0x0 nop ffffffffb500e444: 00000000 sll $0,$0,0x0 ffffffffb500e448 <_CP0_TIM_VEC4_vector>: ... la k0, _CP0_TIM_VEC4_handler ffffffffb500e480: 3c1a0000 lui $26,0x0 ffffffffb500e484: 3c01b501 lui $1,0xb501 ffffffffb500e488: 675a0000 daddiu $26,$26,0 ffffffffb500e48c: 6421e824 daddiu $1,$1,-6108 ffffffffb500e490: 001ad03c dsll32 $26,$26,0x0 ffffffffb500e494: 0341d02d daddu $26,$26,$1 beqz k0, _CP0_TIM_VEC4_vector ffffffffb500e498: 1340ffeb beqz $26,ffffffffb500e448 <_CP0_TIM_VEC4_vector> jr k0 ffffffffb500e49c: 03400008 jr $26 nop ffffffffb500e4a0: 00000000 sll $0,$0,0x0 nop ffffffffb500e4a4: 00000000 sll $0,$0,0x0 Должно быть смещение + 220 и +280 для двух векторов Прошу помочь, может какой флаг надо установить в мэйке Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 16 ноября, 2022 Опубликовано 16 ноября, 2022 · Жалоба Всё у вас как просили - первая команда по запрошенному смещению. А то, что метка до него - так вы .org после метки поставили 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 0 16 ноября, 2022 Опубликовано 16 ноября, 2022 · Жалоба Спасибо большое!!! Теперь почти получилось Я исправил, согласно Вашем замечанию следующим образом: .section .text.gen_handler .set noreorder .ent _SW_VEC1_vector .org + 20 _SW_VEC1_vector: la k0, _SW_VEC1_handler beqz k0, _SW_VEC1_vector jr k0 nop nop .end _SW_VEC1_vector .section .text.gen_handler/*text.CP0_TIM_VEC4_vector*/ .set noreorder .ent _CP0_TIM_VEC4_vector .org + 80 _CP0_TIM_VEC4_vector: la k0, _CP0_TIM_VEC4_handler beqz k0, _CP0_TIM_VEC4_vector jr k0 nop nop .end _CP0_TIM_VEC4_vector и листинг стал почти правильным Disassembly of section .text.gen_handler: ffffffffb500e200 <_gen_handler>: eret ffffffffb500e200: 42000018 eret ... ffffffffb500e214 <_SW_VEC1_vector>: la k0, _SW_VEC1_handler ffffffffb500e214: 3c1a0000 lui $26,0x0 ffffffffb500e218: 3c01b501 lui $1,0xb501 ffffffffb500e21c: 675a0000 daddiu $26,$26,0 ffffffffb500e220: 6421e300 daddiu $1,$1,-7424 ffffffffb500e224: 001ad03c dsll32 $26,$26,0x0 ffffffffb500e228: 0341d02d daddu $26,$26,$1 beqz k0, _SW_VEC1_vector ffffffffb500e22c: 1340fff9 beqz $26,ffffffffb500e214 <_SW_VEC1_vector> jr k0 ffffffffb500e230: 03400008 jr $26 nop ffffffffb500e234: 00000000 sll $0,$0,0x0 ... ffffffffb500e250 <_CP0_TIM_VEC4_vector>: la k0, _CP0_TIM_VEC4_handler ffffffffb500e250: 3c1a0000 lui $26,0x0 ffffffffb500e254: 3c01b501 lui $1,0xb501 ffffffffb500e258: 675a0000 daddiu $26,$26,0 ffffffffb500e25c: 6421e624 daddiu $1,$1,-6620 ffffffffb500e260: 001ad03c dsll32 $26,$26,0x0 ffffffffb500e264: 0341d02d daddu $26,$26,$1 beqz k0, _CP0_TIM_VEC4_vector ffffffffb500e268: 1340fff9 beqz $26,ffffffffb500e250 <_CP0_TIM_VEC4_vector> jr k0 ffffffffb500e26c: 03400008 jr $26 nop ffffffffb500e270: 00000000 sll $0,$0,0x0 nop ffffffffb500e274: 00000000 sll $0,$0,0x0 Теперь осталось понять как выронить(хотя пока не понятно в этом ли проблема), в линкере ALIGN(8), - MIPS64 Должно быть 220 и 280 по двум векторам, а сейчас какое то близкое но непонятное смещение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 16 ноября, 2022 Опубликовано 16 ноября, 2022 · Жалоба 20 десятичное (в org) это 14 в хексе (как в листинге). так что всё правльно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 0 16 ноября, 2022 Опубликовано 16 ноября, 2022 · Жалоба Спасибо большое!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 0 19 ноября, 2022 Опубликовано 19 ноября, 2022 · Жалоба Прошу помочь еще в одном вопросе, - вложенные прерывания. Как я понимаю это специфика мипс, но не пойму зачем они нужны? И как их учитывать при портировании RTOS? Прошу объяснить на пальцах) или подсказать доступную литературу Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 21 ноября, 2022 Опубликовано 21 ноября, 2022 · Жалоба On 11/19/2022 at 1:53 PM, addi II said: Как я понимаю это специфика мипс, но не пойму зачем они нужны? Вкратце - если вы не понимаете, зачем они нужны, то они вам не нужны 🙂 К ним приходят с другой стороны - когда совсем прижмёт, что без них никак, тогда и начинают разбираться. Их использование очень часто вызывает головную боль разработчика, а уж портирование в RTOS - вообще постоянную мигрень. On 11/19/2022 at 1:53 PM, addi II said: Как я понимаю это специфика мипс, но не пойму зачем они нужны? Не только On 11/19/2022 at 1:53 PM, addi II said: Прошу объяснить на пальцах) На пальцах всё очень просто - одни прерывания могут возникнуть во время обработки других. Дальше начинаются детали - Обработчики прерываний более не атомарны Время обработки прерывания становится менее детерминированно Если есть стеки прерываний, то придётся заводить разные стеки либо делать более изощрённое переключение стеков RTOS в принципе должна понимать, что прерывания у неё могут вложиться друг в друга Плюс один - более критичные по времени прерывания будут обрабатываться с минимальной и более детерминированной задержкой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться