Jump to content

    

ichthyandr

Участник
  • Content Count

    84
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ichthyandr

  • Rank
    Частый гость

Recent Profile Visitors

1464 profile views
  1. это каким боком С++ особо применяется на arm?))
  2. чтото странное - разработка сетевых драйверов, всяческие USB, SPI, I2C, PCIe, UART, RS232/485/422 и вдруг тадамм!!! BGP!
  3. У них операционка уже есть с компиллятором или речь о "bare metal"?
  4. хорошо, спасибо )) Вопрос под hal решен uint32_t vect = FIRMWARE_START; __set_MSP(*(__IO uint32_t*)vect); __DSB(); HAL_DeInit(); ((void(*)())(*((uint *)(FIRMWARE_START + 4))))(); нужно делать deinit в бутлоадере
  5. не знаю, как глухой с немым диалог, спросил непосредственно, к чему демагогия?
  6. StmCubeIDE. странно конечно, но на stackoverflow ответов больше
  7. пардон, если резко, но вопрос был задан конкретный
  8. тебе на заметку, умник ) читать тут
  9. там оффсет в прошивке задан, system_stm32f1xx.c: /* #define VECT_TAB_SRAM */ #define VECT_TAB_OFFSET 0x00010000U /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ в SystemInit SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ м.б. таблицу покорежило, надо смотреть ... таблица правильная, systick хендлер описан верно
  10. Вобщем по первому вопросу всё решилось, для перемещения стартового адреса программы нужно править ld скрипт и в опциях запуска задавать адрес таблицы прерываний. Из под IDE норм работает и в дебаге и в релизе. Основная проблема вот в чем, в загружаемой бутлоадером прошивке перестают работать прерывания, таблица правильная, nvic по ходу не работает. На первом же HAL_Delay прошивка остается навсегда
  11. оно так и предполагается, по 0x08000000 будет бутлоадер. Бутлоадер уже работает, шьет прошивку, но при переходе на адрес 0x08010000 всё виснет, в main.c бутлоадера: #define FIRMWARE_START (FLASH_BASE + 0x10000) далее typedef void (*pFunction)(void); pFunction JumpToApplication; HAL_RCC_DeInit(); SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; __disable_irq(); __DSB(); JumpToApplication = (void (*)(void)) (*((uint32_t *) ((FIRMWARE_START + 4)))); __set_MSP(*(__IO uint32_t*) FIRMWARE_START); JumpToApplication();
  12. Всем привет. Есть StmCudeIDE, есть желание изменить дефолтный стартовый адрес с 0x08000000 на 0x08010000 и запустить отладчик. Изменил в скрипте линкера: /* Memories definition */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K FLASH (rx) : ORIGIN = 0x8010000, LENGTH = 192K } /* FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K */ в system_stm32f1xx.c изменил смещение таблицы прерываний: /* #define VECT_TAB_SRAM */ #define VECT_TAB_OFFSET 0x00010000U /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ в настройках проекта с дефолта меняю стартовый адрес (vector table=0x08010000) в STMProgrammer вижу что бинарик залит по адресу 0x08010000. При попытке запуска отладчика программа падает. Кто сталкивался, что делаю не так или еще что-то нужно сделать? Спасибо.
  13. а нет, мой косяк, flash erase, хвост программы терла