Перейти к содержанию
    

Legath

Участник
  • Постов

    40
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Legath

  • Звание
    Участник
    Участник
  • День рождения 08.09.1988

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

1 720 просмотров профиля
  1. у Вас получается в rmii_pe10_pins pins = "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10"; function = "emac"; UPD: завелось, спасибо огромное за патч
  2. Прошу прощения за некропостинг,но можно ли попросить ваш device tree?
  3. Доброго дня. Прошу помощи в понимании взаимодествия частот DSI интерфейса на STM32F769. Вопрос заключается в следующем - согласно каким правилам выставляются частоты DSI line byte и DSI txclkesc ? Завожу дисплей на контроллере ili9881c, скриншот из даташита далее, в нем имеется следующая формула Пытаюсь правильно высчитать тайминги и не понимаю как связаны частоты DSI и LTDC. Правильно ли я понимаю что параметры LTDC определяются исходя из таблицы в даташите дисплея? А битрейт берется из частоты DSI. Буду признателен за любые комментарии
  4. Порт Cortex-R4

    Все оказалось намного проще. порт arm7 полность подходит для cortex-r4 , за исключение плавучки, но это решается дефайнами. Работает. Но есть одна неприятность, работает только первый процесс , при попытке передачи управления процессу 2 возникает ошибка как в самом начале, sp для второго процесса указывает далеко. сейчас занимаюсь с этим.
  5. Порт Cortex-R4

    Да там это все safety проверки. На данном этапе проекта если их все закомментировать ничего не изменится. Попробую ___libc_init_array ибо ни один из бряков в конструкторах не сработал снова.
  6. Порт Cortex-R4

    Файлы ccs7 архивировал. код инициализации я вставлял в source/sys_startup.c Вообще хочется самому разобраться, чтоб понимать до конца как все работает. Поэтому прямо мне решение не сообщайте scm_r4.tar.gz
  7. Порт Cortex-R4

    Это понятно. Я б не стал пытаться делать порт без базовых знаний :bb-offtopic: -O0 , gcc 5.4.1 оставляет если верить дизассемблеру Действительно не ругается. Странно что ругается на редекларацию регионов памяти. /Users/legath/Downloads/gcc-arm-none-eabi-5_4-2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld:/Users/legath/rm46_temp/source/sys_link.ld:19: warning: redeclaration of memory region `VECTORS' /Users/legath/Downloads/gcc-arm-none-eabi-5_4-2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld:/Users/legath/rm46_temp/source/sys_link.ld:20: warning: redeclaration of memory region `FLASH' /Users/legath/Downloads/gcc-arm-none-eabi-5_4-2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld:/Users/legath/rm46_temp/source/sys_link.ld:22: warning: redeclaration of memory region `RAM' /Users/legath/Downloads/gcc-arm-none-eabi-5_4-2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld:/Users/legath/rm46_temp/source/sys_link.ld:23: warning: redeclaration of memory region `MEMORY_B1' CPU_STACK я убрал и память одним куском оставил
  8. Порт Cortex-R4

    Добавил в линковку /* The program code and other data goes into RAM */ .text : { __ctors_start = .; KEEP(SORT(*)(.init_array)) /* eabi uses .init_array for static constructor lists */ __ctors_end = .; __dtors_start = .; __dtors_end = .; . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.glue_7) /* glue arm to thumb code */ *(.glue_7t) /* glue thumb to arm code */ *(.eh_frame) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN(4); _etext = .; /* define a global symbols at end of code */ } >FLASH и перед вызовом main в аналоге reset handler extern uint32 __ctors_start, __ctors_end; void(* const *ctor)(); for( ctor = __ctors_start; ctor < __ctors_end; ) (*ctor++)(); Все равно очень далеко указывает R0 указывает. Видимо я еще что то не учел.
  9. Порт Cortex-R4

    Это дефолтный скрипт из HalCoGen (аналог CubeMX для процессоров TI). Я просто не нашел другого способа получить инициализацию. Но теперь более менее понятно что можно вернуть область RAM в единую. Порт Free RTOS от TI еще больше ее дробит. Там ядро (шедулер? ) лежит в своем сегменте KRAM (xrw) : ORIGIN = 0x08000800, LENGTH = 0x00000800 Подозреваю что не вызываются. S/W BP ниразу не сработал внутри TKernel::register_process. Чтобы ответить на этот вопрос мне не хватает знаний на данный момент . В документации я нашел Software normally uses register R13 as a Stack Pointer (SP). The SRS and RFE instructions use Register R13 И для каждого из режимов процессора R13 имеет свой суффикс(в вашем порте arm7 я видел подобное) Ссылаюсь на документацию от ARM тестовый код main.cpp #include "sys_common.h" #include "gio.h" #include <scmRTOS.h> typedef OS::process<OS::pr0, 300> TProc0; typedef OS::process<OS::pr1, 300> TProc1; TProc0 Proc0; TProc1 Proc1; int main(void) { OS::run(); while(1){ } return 0; } namespace OS { template <> OS_PROCESS void TProc0::exec() { for(;;) { for (int i=0;i<10;i++) { } sleep(10); } } template <> OS_PROCESS void TProc1::exec() { for(;;) { for (int i=0;i<10;i++) { } sleep(10); } } }
  10. Порт Cortex-R4

    cortex r ближе к arm7 чем к cortex-m. у R нет global interrupt controller, и ассемблер отличается. я это понимаю и, по идее, Kernel.ProcessTable должна в кострукторе заполняться. меня еще скрипт линковки смущает VECTORS(rx) : ORIGIN = 0x00000000, LENGTH = 0x00000020 FLASH (rx) : ORIGIN = 0x00000020, LENGTH = 0x0013FFE0 CPU_STACK (rw) : ORIGIN = 0x08000000, LENGTH = 0x00001500 /* Stack is configured in sys_core.asm */ RAM (xrw) : ORIGIN = 0x08001500, LENGTH = 0x0002EB00 MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K CPU_STACK отдельно идет
  11. Порт Cortex-R4

    Всем доброго дня. Пытаюсь сделать порт для Cortex R4F (чип RM46L852). Компилятор gcc 5.4.1. Использую схему с программным прерыванием. Но возникает проблема в реализации функции os_start По примеру порта ARM7 сделал ассемблерный файл со следующий содержимым (подсматривал в других ОСРВ) .set SYS_MODE, 0x1f .set SVC_MODE, 0x13 .set IRQ_MODE, 0x12 .set STUB, 0x00 .global context_restore context_restore: // os_start() passes New_SP in R0 CPS #SYS_MODE LDR R1, [R0] LDR SP, [R1] /* Restore the floating point context, if any. */ POPNE {R0} VPOPNE {D0-D15} VMSRNE FPSCR, R0 /* Restore all system mode registers other than the SP (which is already being used). */ POP {R0-R12, R14} /* Return to the task code, loading CPSR on the way. */ RFEIA sp! в отладчике штатно дохожу до строки LDR R1, [R0] и при ее выполнении процессор улетает в dabort handler. Это означает что инструкция обратилась к данным с которыми проблема. Подскажите пожалуйста в какую сторону начать поиски. у меня подозрение что я что то неверно делаю с заготовкой стека. void TBaseProcess::init_stack_frame( stack_item_t * Stack , void (*exec)() #if scmRTOS_DEBUG_ENABLE == 1 , stack_item_t * StackBegin #endif ) { *Stack = ( stack_item_t ) NULL; Stack--; *Stack = ( stack_item_t ) NULL; Stack--; *Stack = ( stack_item_t ) NULL; Stack--; *Stack = ( stack_item_t ) 0x1f;; if((uintptr_t)exec & (0x01UL)) { *Stack = *Stack | 0x20; } Stack--; *Stack = reinterpret_cast<stack_item_t>(exec);; Stack--; *Stack = ( stack_item_t ) 0; /* R14 */ Stack--; *Stack = ( stack_item_t ) 0; /* R12 */ Stack--; *Stack = ( stack_item_t ) 0; /* R11 */ Stack--; *Stack = ( stack_item_t ) 0; /* R10 */ Stack--; *Stack = ( stack_item_t ) 0; /* R9 */ Stack--; *Stack = ( stack_item_t ) 0; /* R8 */ Stack--; *Stack = ( stack_item_t ) 0; /* R7 */ Stack--; *Stack = ( stack_item_t ) 0; /* R6 */ Stack--; *Stack = ( stack_item_t ) 0; /* R5 */ Stack--; *Stack = ( stack_item_t ) 0; /* R4 */ Stack--; *Stack = ( stack_item_t ) 0; /* R3 */ Stack--; *Stack = ( stack_item_t ) 0; /* R2 */ Stack--; *Stack = ( stack_item_t ) 0; /* R1 */ Stack--; *Stack = ( stack_item_t ) 0; /* R0 */ Stack--; *Stack = ( uint32_t ) 0; Stack--; *Stack = ( stack_item_t ) 0; } Это точно не MPU, я его отключал. ADD: в этот момент в R0 содержится значение 0xea006068 , память по этому адресу просмотреть нельзя. Прошу сильно не пинать. Процессор для меня новый.
  12. scmRTOS как POSIX thread

    Думаю всем будет интересно
  13. RO rootfs

    nand флешки хорошо дружат с yaffs2. поэтому вы вполне можете иметь три раздела на флешке.
  14. scmRTOS как POSIX thread

    mingw ест линуховые исходники хорошо. Думаю это не будет проблемой. но вот за виндовое время реакции я не уверен.
  15. scmRTOS как POSIX thread

    В портировании и я не вижу смысла. А вот отладить межпроцессное взаимодействие в рамках проекта, а самое главное сэмулировать работу устройства (JTAG/SWD не берем в рассчет) было бы удобно. Эмуляцию прерываний я вижу реализуемой через POSIX timers, так же как и SysTick. В этом случае мы можем "более менее" выставить временнЫе соотношения.
×
×
  • Создать...