Jump to content

    

doom13

Свой
  • Content Count

    1502
  • Joined

  • Last visited

Community Reputation

0 Обычный

About doom13

  • Rank
    Профессионал
  • Birthday 02/09/1982

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Минск, Беларусь

Recent Profile Visitors

6443 profile views
  1. Рестарт FreeRTOS

    Проблема пока осталась нерешённой и актуальна (просто в данный момент работаю над другой задачей). Внешний рам 4 ГБ, все приложения работают в отдельных областях памяти, мусор остаётся от предыдущего старта.
  2. Приветствую. Вопрос по MultiBoot для Kintex UltraScale+. Пока сгенерировал два bit-файла с настройками для golden image: set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] set_property BITSTREAM.GENERAL.CRC ENABLE [current_design] set_property BITSTREAM.CONFIG.CONFIGRATE 31.9 [current_design] set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design] set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] set_property BITSTREAM.CONFIG.TIMER_CFG 0x00050000 [current_design] set_property BITSTREAM.CONFIG.NEXT_CONFIG_REBOOT Enable [current_design] set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x01000000 [current_design] для multiboot image: set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] set_property BITSTREAM.GENERAL.CRC ENABLE [current_design] set_property BITSTREAM.CONFIG.CONFIGRATE 31.9 [current_design] set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design] set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] C нулевого адреса лежит golden.bit, multiboot.bit ложится с адреса 0х01000000 и успешно стартует. Как понимаю, в шапке golden.bit содержится адрес 0х01000000 старта multiboot.bit и на него и переходит. Вопрос в том, если вместо multiboot.bit залить multiboot.bin (уже без шапки) так же всё работает. Но если заливку multiboot.bin прервать, то система больше не грузится (вроде должна остаться в golden). Что не так тут делаю? Если потом просто стереть область памяти, куда ложился multiboot.bin система начинает запускаться с golden_image. Ещё читаю про HWICAP, но не совсем понятно, обязателен ли он для реализации MultiBoot. Спасибо.
  3. Умеет ли Tri-Mode Ethernet или AXI 1G/2.5G Ethernet Subsystem подменять source mac address в AXI стриме, который на неё заходит? Есть в bsp int XAxiEthernet_SetMacAddress(XAxiEthernet *InstancePtr, void *AddressPtr); или это только даля фильтрации юникастов?
  4. Пробовал, 100 кБ это минимальный размер, который удалось с неё выжать, оставив пару буферов на приём и передачу. Хотелось быстро, но видимо придётся всё вручную делать(
  5. Без внешней памяти LwIP использовать не пробовали? Есть необходимость прикрутить IP/UDP к MicroBlaze, но LwIP жрёт порядка 100 кБ памяти, как не пытался её ужать, и тратить на неё внутреннюю память FPGA как-то жалко.
  6. Никак не обойти. Если только резаки на конфигурационных пинах перепаять. Не всегда есть такая возможность(накидать пару строк в FSBL))
  7. Рестарт FreeRTOS

    Таким образом пытался сохранить состояние регистров процессора до старта планировщика (нарыл тут freertos-how-to-end-and-restart-the-scheduler). Без них сыпалось уже на первом возврате из приложения в загрузчик. Сейчас позволяет вернуться, перезалить RAM новой прошивкой, стартануть её, но дохнет на адресах перезалитой прошивки.
  8. Рестарт FreeRTOS

    Используемая платформа - ZynqMP (для старта системы используется APU0). Старт системы происходит следующим образом: 1. BootROM 2. FSBL (Выполняет инициализацию всей системы, грузит прошивку FPGA, грузит прошивку для Bootloader) 3. Bootloader (FreeRTOS) 4. Application (FreeRTOS) Аппаратный сброс системы не совсем удачное решение. Необходимо реализовать возможность перехода из Bootloader в Application и обратно. Тут пока не могу разобраться, каким образом загнать FreeRTOS в исходное состояние. Для перехода из загрузчика в основную программу использую: #include <setjmp.h> jmp_buf xJumpBuf; bool jump_to_application_enable = false; int main() { setjmp(xJumpBuf); if(jump_to_application_enable) { jump_to_application_enable = false; ((void(*)(void))0x10000000)(); } ... } int goto_application_cb(char *cbuf, uint32_t size, void *param) { ...... portDISABLE_INTERRUPTS(); Xil_DCacheFlush(); Xil_ICacheInvalidate(); ullCriticalNesting = 1000ULL; vTaskEndScheduler(); jump_to_application_enable = true; longjmp(xJumpBuf, 1); return 0; } и такой же переход в основном приложении на загрузчик. Появилась возможность залить прошивку приложения, перейти на её выполнение, вернуться обратно в загрузчик, перезалить прошивку ещё раз. Но при втором старте основной программы пока дохнет.
  9. С malloc всё в норме, минус 100 кБ в секции text, но хочется, чтоб был new) Сейчас проверил, что у Altera такой ерунды нету.
  10. Приветствую. Использование оператора new в программе для MicroBlaze увеличивает размер кода на ~100 кБ. Возможно ли как-то ужать?
  11. Рестарт FreeRTOS

    Преветствую. Вопрос по реализации загрузчика. Есть основная программа и загрузчик на базе FreeRTOS. Вопрос как реализовать переход из основной прошивки в загрузчик и наоборот (как правильно реализовать рестарт для системы на базе FreeRTOS). Попробовал сделать так: // Переход на загрузчик portDISABLE_INTERRUPTS(); Xil_DCacheFlush(); Xil_ICacheInvalidate(); ((void(*)(void))0x00000000)(); // Переход на основную программу portDISABLE_INTERRUPTS(); Xil_DCacheFlush(); Xil_ICacheInvalidate(); ((void(*)(void))0x10000000)(); Такой вариант стартует прошивку только один раз, переход на загрузчик происходит, но система улетает в ошибочное состояние. Что ещё необходимо для рестарта FreeRTOS?
  12. Вам нужны исходники? Тогда тут. Если проект под PetaLinux, то там это всё уже есть и при сборке получаем все бинарники в папке petalinux_project/images/linux.