Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 (изменено) · Жалоба Приветствую. Подскажите пожалуйста, где в Keil расположен __main. И можно ли изменить адресацию области хранения данных для глобальной инициализации переменных? Пишу программу с загрузчиком в одном проекте. Загрузчик расположил в начале, за ним эмуляция ЕЕПРОМ, и основная программа. При компиляции область хранения данных для глобальной инициализации переменных оказывается ниже основной программы. Какие есть варианты решения проблемы, если на функцию __main повлиять нельзя? В загрузчике расположен USB_CDC стёк. Думаю можно самому инициализировать переменные, но может есть способ менее затратный по времени? Изменено 30 октября, 2019 пользователем Elektrons4eg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба С кейлом не работаю, но из сообщений на этом форуме знаю, что все это делается через scatter-файл (это вам ключевое слово для поиска). От себя могу заметить, что совмещать загрузчик и программу в одном проекте - очень неудачное решение. Вот тут разбирали, почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба Скаттер я настроил, отдельные секции для кода и данных. Но в его хелпе по своей проблеме ответ пока не нашёл. Это мой первый проект в кейле для STM32, возможно решение совмещения неудачное. Но на момент создания проекта казалось самым простым из всех возможных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 2 минуты назад, Elektrons4eg сказал: Это мой первый проект в кейле для STM32, возможно решение совмещения неудачное. И какие гарантии, что из получившегося кода загрузчика не будет обращений к функциям или константам в основной программе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 (изменено) · Жалоба У загрузчика и основной программы разные секции для кода и данных. После проверки целостности основной программы, загрузчик передаёт её управление один раз (в начало секции кода основной программы). Основная программа работает без прерываний и обращений к коду загрузчика. Всё это настроено и отлично работает. Пытался в скаттере указать секцию с __main.o, результат отрицательный - warning: L6314W: No section matces pattern __main.o(RO) Изменено 30 октября, 2019 пользователем Elektrons4eg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 1 минуту назад, Elektrons4eg сказал: У загрузчика и основной программы разные секции для кода и данных. И что? Да хоть 10 разных секций. 1 минуту назад, Elektrons4eg сказал: После проверки целостности основной программы, загрузчик передаёт её управление один раз. Основная программа работает без прерываний и обращений к коду загрузчика. Это Вам так кажется. Компилятор запросто может объединить часть кода или данных основной программы и загрузчика. Так как компилится всё вместе. И когда загрузчик попытается стереть основную программу для обновления, он сотрёт часть себя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 2 минуты назад, jcxz сказал: Это Вам так кажется. Компилятор запросто может объединить часть кода или данных основной программы и загрузчика. Так как компилится всё вместе. И когда загрузчик попытается стереть основную программу для обновления, он сотрёт часть себя. Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 7 минут назад, Elektrons4eg сказал: Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map. Во-первых: по .map-у это практически невозможно увидеть. Во-вторых: если сегодня нет, то нет никакой гарантии что завтра, после малейшей правки кода или изменении версии компилятора или его опций, этого не возникнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 4 hours ago, Сергей Борщ said: От себя могу заметить, что совмещать загрузчик и программу в одном проекте - очень неудачное решение. Вот да, нажить проблем на ровном месте. Собственно, они уже начались, хотя еще ничего и не готово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 3 часа назад, Elektrons4eg сказал: Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map. Покажите в нем отрывки с отдельными копиями библиотечных функций для загрузчика и приложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 8 минут назад, Сергей Борщ сказал: Покажите в нем отрывки с отдельными копиями библиотечных функций для загрузчика и приложения. RESET 0x08000000 Section 336 startup_stm32f105xc.o(RESET) .ARM.Collect$$$$00000000 0x08000150 Section 0 entry.o(.ARM.Collect$$$$00000000) .ARM.Collect$$$$00000001 0x08000150 Section 4 entry2.o(.ARM.Collect$$$$00000001) .ARM.Collect$$$$00000004 0x08000154 Section 4 entry5.o(.ARM.Collect$$$$00000004) .ARM.Collect$$$$00000008 0x08000158 Section 0 entry7b.o(.ARM.Collect$$$$00000008) .ARM.Collect$$$$0000000A 0x08000158 Section 0 entry8b.o(.ARM.Collect$$$$0000000A) .ARM.Collect$$$$0000000B 0x08000158 Section 8 entry9a.o(.ARM.Collect$$$$0000000B) .ARM.Collect$$$$0000000D 0x08000160 Section 0 entry10a.o(.ARM.Collect$$$$0000000D) .ARM.Collect$$$$0000000F 0x08000160 Section 0 entry11a.o(.ARM.Collect$$$$0000000F) .ARM.Collect$$$$00002712 0x08000160 Section 4 entry2.o(.ARM.Collect$$$$00002712) __lit__00000000 0x08000160 Data 4 entry2.o(.ARM.Collect$$$$00002712) .text 0x08000164 Section 36 startup_stm32f105xc.o(.text) .text 0x08000188 Section 0 memcpya.o(.text) .text 0x080001ac Section 36 init.o(.text) .text 0x080001d0 Section 0 __dczerorl2.o(.text) i.CDC_Control_FS 0x08000226 Section 0 usbd_cdc_if.o(i.CDC_Control_FS) CDC_Control_FS 0x08000227 Thumb Code 68 usbd_cdc_if.o(i.CDC_Control_FS) i.CDC_DeInit_FS 0x0800026a Section 0 usbd_cdc_if.o(i.CDC_DeInit_FS) CDC_DeInit_FS 0x0800026b Thumb Code 4 usbd_cdc_if.o(i.CDC_DeInit_FS) i.CDC_Init_FS 0x08000270 Section 0 usbd_cdc_if.o(i.CDC_Init_FS) CDC_Init_FS 0x08000271 Thumb Code 34 usbd_cdc_if.o(i.CDC_Init_FS) i.CDC_Receive_FS 0x080002a4 Section 0 usbd_cdc_if.o(i.CDC_Receive_FS) CDC_Receive_FS 0x080002a5 Thumb Code 1264 usbd_cdc_if.o(i.CDC_Receive_FS) i.CDC_periodic_callback 0x080007b8 Section 0 usbd_cdc_if.o(i.CDC_periodic_callback) i.HAL_Delay 0x08000844 Section 0 stm32f1xx_hal.o(i.HAL_Delay) i.HAL_GPIO_Init 0x08000860 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) i.HAL_GetTick 0x08000b7c Section 0 stm32f1xx_hal.o(i.HAL_GetTick) i.HAL_Init 0x08000b90 Section 0 stm32f1xx_hal.o(i.HAL_Init) i.HAL_InitTick 0x08000bb8 Section 0 stm32f1xx_hal.o(i.HAL_InitTick) i.HAL_MspInit 0x08000bdc Section 0 stm32f1xx_hal_msp.o(i.HAL_MspInit) i.HAL_NVIC_EnableIRQ 0x08000c04 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) i.HAL_NVIC_SetPriority 0x08000c1e Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) i.HAL_NVIC_SetPriorityGrouping 0x08000c9c Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) i.HAL_PCDEx_SetConnectionState 0x08000cc4 Section 0 usbd_conf.o(i.HAL_PCDEx_SetConnectionState) i.HAL_PCDEx_SetRxFiFo 0x08000cc6 Section 0 stm32f1xx_hal_pcd_ex.o(i.HAL_PCDEx_SetRxFiFo) i.HAL_PCDEx_SetTxFiFo 0x08000cd0 Section 0 stm32f1xx_hal_pcd_ex.o(i.HAL_PCDEx_SetTxFiFo) i.HAL_PCD_ConnectCallback 0x08000d22 Section 0 usbd_conf.o(i.HAL_PCD_ConnectCallback) i.HAL_PCD_DataInStageCallback 0x08000d30 Section 0 usbd_conf.o(i.HAL_PCD_DataInStageCallback) i.HAL_PCD_DataOutStageCallback 0x08000d50 Section 0 usbd_conf.o(i.HAL_PCD_DataOutStageCallback) i.HAL_PCD_DisconnectCallback 0x08000d70 Section 0 usbd_conf.o(i.HAL_PCD_DisconnectCallback) i.HAL_PCD_EP_Close 0x08000d7e Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_Close) i.HAL_PCD_EP_ClrStall 0x08000dea Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_ClrStall) i.HAL_PCD_EP_GetRxCount 0x08000e54 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_GetRxCount) i.HAL_PCD_EP_Open 0x08000e6c Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_Open) i.HAL_PCD_EP_Receive 0x08000eea Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_Receive) i.HAL_PCD_EP_SetStall 0x08000f58 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_SetStall) i.HAL_PCD_EP_Transmit 0x08000fd2 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_EP_Transmit) i.HAL_PCD_IRQHandler 0x08001042 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_IRQHandler) i.HAL_PCD_ISOINIncompleteCallback 0x0800144c Section 0 usbd_conf.o(i.HAL_PCD_ISOINIncompleteCallback) i.HAL_PCD_ISOOUTIncompleteCallback 0x0800145e Section 0 usbd_conf.o(i.HAL_PCD_ISOOUTIncompleteCallback) i.HAL_PCD_Init 0x08001470 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_Init) i.HAL_PCD_MspInit 0x080015bc Section 0 usbd_conf.o(i.HAL_PCD_MspInit) i.HAL_PCD_ResetCallback 0x08001614 Section 0 usbd_conf.o(i.HAL_PCD_ResetCallback) i.HAL_PCD_ResumeCallback 0x08001646 Section 0 usbd_conf.o(i.HAL_PCD_ResumeCallback) i.HAL_PCD_SOFCallback 0x08001654 Section 0 usbd_conf.o(i.HAL_PCD_SOFCallback) i.HAL_PCD_SetAddress 0x08001662 Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_SetAddress) i.HAL_PCD_SetupStageCallback 0x08001698 Section 0 usbd_conf.o(i.HAL_PCD_SetupStageCallback) i.HAL_PCD_Start 0x080016aa Section 0 stm32f1xx_hal_pcd.o(i.HAL_PCD_Start) i.HAL_PCD_SuspendCallback 0x080016e8 Section 0 usbd_conf.o(i.HAL_PCD_SuspendCallback) i.HAL_RCCEx_PeriphCLKConfig 0x0800171c Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig) i.HAL_RCC_ClockConfig 0x080019c0 Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCC_ClockConfig) i.HAL_RCC_GetHCLKFreq 0x08001df4 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) i.HAL_RCC_GetSysClockFreq 0x08001e2c Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCC_GetSysClockFreq) i.HAL_RCC_OscConfig 0x08001f80 Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCC_OscConfig) i.HAL_SYSTICK_Config 0x08002b48 Section 0 stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) i.HAL_TIMEx_MasterConfigSynchronization 0x08002b7c Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) i.HAL_TIM_Base_Init 0x08002bde Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) i.HAL_TIM_Base_MspInit 0x08002c14 Section 0 stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) i.HAL_TIM_Base_Start 0x08002c44 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start) i.HAL_TIM_ConfigClockSource 0x08002c62 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) i.MX_USB_DEVICE_Init 0x08002d94 Section 0 usb_device.o(i.MX_USB_DEVICE_Init) i.NMI_Handler 0x08002dc8 Section 0 main.o(i.NMI_Handler) i.NVIC_GetPriorityGrouping 0x08002dd0 Section 0 stm32f1xx_hal_cortex.o(i.NVIC_GetPriorityGrouping) NVIC_GetPriorityGrouping 0x08002dd1 Thumb Code 10 stm32f1xx_hal_cortex.o(i.NVIC_GetPriorityGrouping) i.NVIC_SetPriority 0x08002de0 Section 0 stm32f1xx_hal_cortex.o(i.NVIC_SetPriority) NVIC_SetPriority 0x08002de1 Thumb Code 32 stm32f1xx_hal_cortex.o(i.NVIC_SetPriority) i.OTG_FS_IRQHandler 0x08002e08 Section 0 main.o(i.OTG_FS_IRQHandler) i.PCD_WriteEmptyTxFifo 0x08002e18 Section 0 stm32f1xx_hal_pcd.o(i.PCD_WriteEmptyTxFifo) PCD_WriteEmptyTxFifo 0x08002e19 Thumb Code 172 stm32f1xx_hal_pcd.o(i.PCD_WriteEmptyTxFifo) i.REC_ROM 0x08002ec4 Section 0 usbd_cdc_if.o(i.REC_ROM) i.SysTick_Handler 0x08002fc8 Section 0 main.o(i.SysTick_Handler) i.SystemInit 0x08002fe0 Section 0 system_stm32f1xx.o(i.SystemInit) i.TIM_Base_SetConfig 0x08003044 Section 0 stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) i.TIM_ETR_SetConfig 0x080030c0 Section 0 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) TIM_ETR_SetConfig 0x080030c1 Thumb Code 24 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) i.TIM_ITRx_SetConfig 0x080030d8 Section 0 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) TIM_ITRx_SetConfig 0x080030d9 Thumb Code 20 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) i.TIM_TI1_ConfigInputStage 0x080030ec Section 0 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) TIM_TI1_ConfigInputStage 0x080030ed Thumb Code 42 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) i.TIM_TI2_ConfigInputStage 0x08003116 Section 0 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) TIM_TI2_ConfigInputStage 0x08003117 Thumb Code 44 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) i.USBD_CDC_DataIn 0x08003142 Section 0 usbd_cdc.o(i.USBD_CDC_DataIn) USBD_CDC_DataIn 0x08003143 Thumb Code 26 usbd_cdc.o(i.USBD_CDC_DataIn) i.USBD_CDC_DataOut 0x0800315c Section 0 usbd_cdc.o(i.USBD_CDC_DataOut) USBD_CDC_DataOut 0x0800315d Thumb Code 52 usbd_cdc.o(i.USBD_CDC_DataOut) i.USBD_CDC_DeInit 0x08003190 Section 0 usbd_cdc.o(i.USBD_CDC_DeInit) USBD_CDC_DeInit 0x08003191 Thumb Code 64 usbd_cdc.o(i.USBD_CDC_DeInit) i.USBD_CDC_EP0_RxReady 0x080031d0 Section 0 usbd_cdc.o(i.USBD_CDC_EP0_RxReady) USBD_CDC_EP0_RxReady 0x080031d1 Thumb Code 50 usbd_cdc.o(i.USBD_CDC_EP0_RxReady) i.USBD_CDC_GetDeviceQualifierDescriptor 0x08003204 Section 0 usbd_cdc.o(i.USBD_CDC_GetDeviceQualifierDescriptor) i.USBD_CDC_GetFSCfgDesc 0x08003214 Section 0 usbd_cdc.o(i.USBD_CDC_GetFSCfgDesc) USBD_CDC_GetFSCfgDesc 0x08003215 Thumb Code 10 usbd_cdc.o(i.USBD_CDC_GetFSCfgDesc) i.USBD_CDC_GetHSCfgDesc 0x08003224 Section 0 usbd_cdc.o(i.USBD_CDC_GetHSCfgDesc) USBD_CDC_GetHSCfgDesc 0x08003225 Thumb Code 10 usbd_cdc.o(i.USBD_CDC_GetHSCfgDesc) i.USBD_CDC_GetOtherSpeedCfgDesc 0x08003234 Section 0 usbd_cdc.o(i.USBD_CDC_GetOtherSpeedCfgDesc) USBD_CDC_GetOtherSpeedCfgDesc 0x08003235 Thumb Code 10 usbd_cdc.o(i.USBD_CDC_GetOtherSpeedCfgDesc) i.USBD_CDC_Init 0x08003244 Section 0 usbd_cdc.o(i.USBD_CDC_Init) USBD_CDC_Init 0x08003245 Thumb Code 166 usbd_cdc.o(i.USBD_CDC_Init) i.USBD_CDC_ReceivePacket 0x080032ea Section 0 usbd_cdc.o(i.USBD_CDC_ReceivePacket) i.USBD_CDC_RegisterInterface 0x08003324 Section 0 usbd_cdc.o(i.USBD_CDC_RegisterInterface) i.USBD_CDC_SetRxBuffer 0x08003332 Section 0 usbd_cdc.o(i.USBD_CDC_SetRxBuffer) i.USBD_CDC_SetTxBuffer 0x08003340 Section 0 usbd_cdc.o(i.USBD_CDC_SetTxBuffer) i.USBD_CDC_Setup 0x08003354 Section 0 usbd_cdc.o(i.USBD_CDC_Setup) USBD_CDC_Setup 0x08003355 Thumb Code 106 usbd_cdc.o(i.USBD_CDC_Setup) i.USBD_CDC_TransmitPacket 0x080033be Section 0 usbd_cdc.o(i.USBD_CDC_TransmitPacket) i.USBD_ClrClassConfig 0x080033f6 Section 0 usbd_core.o(i.USBD_ClrClassConfig) i.USBD_ClrFeature 0x0800340c Section 0 usbd_ctlreq.o(i.USBD_ClrFeature) USBD_ClrFeature 0x0800340d Thumb Code 68 usbd_ctlreq.o(i.USBD_ClrFeature) i.USBD_CtlContinueRx 0x08003450 Section 0 usbd_ioreq.o(i.USBD_CtlContinueRx) i.USBD_CtlContinueSendData 0x08003468 Section 0 usbd_ioreq.o(i.USBD_CtlContinueSendData) i.USBD_CtlError 0x08003480 Section 0 usbd_ctlreq.o(i.USBD_CtlError) i.USBD_CtlPrepareRx 0x08003498 Section 0 usbd_ioreq.o(i.USBD_CtlPrepareRx) i.USBD_CtlReceiveStatus 0x080034c0 Section 0 usbd_ioreq.o(i.USBD_CtlReceiveStatus) i.USBD_CtlSendData 0x080034da Section 0 usbd_ioreq.o(i.USBD_CtlSendData) i.USBD_CtlSendStatus 0x080034fc Section 0 usbd_ioreq.o(i.USBD_CtlSendStatus) i.USBD_FS_ConfigStrDescriptor 0x08003518 Section 0 usbd_desc.o(i.USBD_FS_ConfigStrDescriptor) i.USBD_FS_DeviceDescriptor 0x0800354c Section 0 usbd_desc.o(i.USBD_FS_DeviceDescriptor) i.USBD_FS_InterfaceStrDescriptor 0x0800355c Section 0 usbd_desc.o(i.USBD_FS_InterfaceStrDescriptor) i.USBD_FS_LangIDStrDescriptor 0x08003594 Section 0 usbd_desc.o(i.USBD_FS_LangIDStrDescriptor) i.USBD_FS_ManufacturerStrDescriptor 0x080035a4 Section 0 usbd_desc.o(i.USBD_FS_ManufacturerStrDescriptor) i.USBD_FS_ProductStrDescriptor 0x080035c8 Section 0 usbd_desc.o(i.USBD_FS_ProductStrDescriptor) i.USBD_FS_SerialStrDescriptor 0x08003600 Section 0 usbd_desc.o(i.USBD_FS_SerialStrDescriptor) i.USBD_GetConfig 0x08003638 Section 0 usbd_ctlreq.o(i.USBD_GetConfig) USBD_GetConfig 0x08003639 Thumb Code 80 usbd_ctlreq.o(i.USBD_GetConfig) i.USBD_GetDescriptor 0x08003688 Section 0 usbd_ctlreq.o(i.USBD_GetDescriptor) USBD_GetDescriptor 0x08003689 Thumb Code 328 usbd_ctlreq.o(i.USBD_GetDescriptor) i.USBD_GetLen 0x080037d0 Section 0 usbd_ctlreq.o(i.USBD_GetLen) USBD_GetLen 0x080037d1 Thumb Code 20 usbd_ctlreq.o(i.USBD_GetLen) i.USBD_GetStatus 0x080037e4 Section 0 usbd_ctlreq.o(i.USBD_GetStatus) USBD_GetStatus 0x080037e5 Thumb Code 68 usbd_ctlreq.o(i.USBD_GetStatus) i.USBD_GetString 0x08003828 Section 0 usbd_ctlreq.o(i.USBD_GetString) i.USBD_Init 0x0800387a Section 0 usbd_core.o(i.USBD_Init) i.USBD_LL_ClearStallEP 0x080038ac Section 0 usbd_conf.o(i.USBD_LL_ClearStallEP) i.USBD_LL_CloseEP 0x080038c0 Section 0 usbd_conf.o(i.USBD_LL_CloseEP) i.USBD_LL_DataInStage 0x080038d4 Section 0 usbd_core.o(i.USBD_LL_DataInStage) i.USBD_LL_DataOutStage 0x08003996 Section 0 usbd_core.o(i.USBD_LL_DataOutStage) i.USBD_LL_DevConnected 0x08003a1c Section 0 usbd_core.o(i.USBD_LL_DevConnected) i.USBD_LL_DevDisconnected 0x08003a22 Section 0 usbd_core.o(i.USBD_LL_DevDisconnected) i.USBD_LL_GetRxDataSize 0x08003a3c Section 0 usbd_conf.o(i.USBD_LL_GetRxDataSize) i.USBD_LL_Init 0x08003a50 Section 0 usbd_conf.o(i.USBD_LL_Init) i.USBD_LL_IsStallEP 0x08003aa8 Section 0 usbd_conf.o(i.USBD_LL_IsStallEP) i.USBD_LL_IsoINIncomplete 0x08003ae0 Section 0 usbd_core.o(i.USBD_LL_IsoINIncomplete) i.USBD_LL_IsoOUTIncomplete 0x08003ae6 Section 0 usbd_core.o(i.USBD_LL_IsoOUTIncomplete) i.USBD_LL_OpenEP 0x08003aec Section 0 usbd_conf.o(i.USBD_LL_OpenEP) i.USBD_LL_PrepareReceive 0x08003b0c Section 0 usbd_conf.o(i.USBD_LL_PrepareReceive) i.USBD_LL_Reset 0x08003b2c Section 0 usbd_core.o(i.USBD_LL_Reset) i.USBD_LL_Resume 0x08003b70 Section 0 usbd_core.o(i.USBD_LL_Resume) i.USBD_LL_SOF 0x08003b7e Section 0 usbd_core.o(i.USBD_LL_SOF) i.USBD_LL_SetSpeed 0x08003ba0 Section 0 usbd_core.o(i.USBD_LL_SetSpeed) i.USBD_LL_SetUSBAddress 0x08003ba8 Section 0 usbd_conf.o(i.USBD_LL_SetUSBAddress) i.USBD_LL_SetupStage 0x08003bbc Section 0 usbd_core.o(i.USBD_LL_SetupStage) i.USBD_LL_StallEP 0x08003c2a Section 0 usbd_conf.o(i.USBD_LL_StallEP) i.USBD_LL_Start 0x08003c3e Section 0 usbd_conf.o(i.USBD_LL_Start) i.USBD_LL_Suspend 0x08003c4e Section 0 usbd_core.o(i.USBD_LL_Suspend) i.USBD_LL_Transmit 0x08003c62 Section 0 usbd_conf.o(i.USBD_LL_Transmit) i.USBD_ParseSetupRequest 0x08003c82 Section 0 usbd_ctlreq.o(i.USBD_ParseSetupRequest) i.USBD_RegisterClass 0x08003caa Section 0 usbd_core.o(i.USBD_RegisterClass) i.USBD_RunTestMode 0x08003cba Section 0 usbd_core.o(i.USBD_RunTestMode) i.USBD_SetAddress 0x08003cc0 Section 0 usbd_ctlreq.o(i.USBD_SetAddress) USBD_SetAddress 0x08003cc1 Thumb Code 84 usbd_ctlreq.o(i.USBD_SetAddress) i.USBD_SetClassConfig 0x08003d14 Section 0 usbd_core.o(i.USBD_SetClassConfig) i.USBD_SetConfig 0x08003d38 Section 0 usbd_ctlreq.o(i.USBD_SetConfig) USBD_SetConfig 0x08003d39 Thumb Code 218 usbd_ctlreq.o(i.USBD_SetConfig) i.USBD_SetFeature 0x08003e18 Section 0 usbd_ctlreq.o(i.USBD_SetFeature) USBD_SetFeature 0x08003e19 Thumb Code 36 usbd_ctlreq.o(i.USBD_SetFeature) i.USBD_Start 0x08003e3c Section 0 usbd_core.o(i.USBD_Start) i.USBD_StdDevReq 0x08003e4a Section 0 usbd_ctlreq.o(i.USBD_StdDevReq) i.USBD_StdEPReq 0x08003ebc Section 0 usbd_ctlreq.o(i.USBD_StdEPReq) i.USBD_StdItfReq 0x08003ff8 Section 0 usbd_ctlreq.o(i.USBD_StdItfReq) i.USBD_static_free 0x08004042 Section 0 usbd_conf.o(i.USBD_static_free) i.USBD_static_malloc 0x08004050 Section 0 usbd_conf.o(i.USBD_static_malloc) i.USB_ActivateEndpoint 0x0800405c Section 0 stm32f1xx_ll_usb.o(i.USB_ActivateEndpoint) i.USB_ActivateSetup 0x08004134 Section 0 stm32f1xx_ll_usb.o(i.USB_ActivateSetup) i.USB_CoreInit 0x08004178 Section 0 stm32f1xx_ll_usb.o(i.USB_CoreInit) i.USB_CoreReset 0x08004194 Section 0 stm32f1xx_ll_usb.o(i.USB_CoreReset) USB_CoreReset 0x08004195 Thumb Code 70 stm32f1xx_ll_usb.o(i.USB_CoreReset) i.USB_DeactivateEndpoint 0x080041e0 Section 0 stm32f1xx_ll_usb.o(i.USB_DeactivateEndpoint) i.USB_DevConnect 0x08004288 Section 0 stm32f1xx_ll_usb.o(i.USB_DevConnect) i.USB_DevDisconnect 0x080042a6 Section 0 stm32f1xx_ll_usb.o(i.USB_DevDisconnect) i.USB_DevInit 0x080042c4 Section 0 stm32f1xx_ll_usb.o(i.USB_DevInit) i.USB_DisableGlobalInt 0x0800442c Section 0 stm32f1xx_ll_usb.o(i.USB_DisableGlobalInt) i.USB_EP0StartXfer 0x0800443c Section 0 stm32f1xx_ll_usb.o(i.USB_EP0StartXfer) i.USB_EP0_OutStart 0x080045c0 Section 0 stm32f1xx_ll_usb.o(i.USB_EP0_OutStart) i.USB_EPClearStall 0x080045f0 Section 0 stm32f1xx_ll_usb.o(i.USB_EPClearStall) i.USB_EPSetStall 0x08004678 Section 0 stm32f1xx_ll_usb.o(i.USB_EPSetStall) i.USB_EPStartXfer 0x08004704 Section 0 stm32f1xx_ll_usb.o(i.USB_EPStartXfer) i.USB_EnableGlobalInt 0x080049a8 Section 0 stm32f1xx_ll_usb.o(i.USB_EnableGlobalInt) i.USB_FlushRxFifo 0x080049b8 Section 0 stm32f1xx_ll_usb.o(i.USB_FlushRxFifo) i.USB_FlushTxFifo 0x080049e4 Section 0 stm32f1xx_ll_usb.o(i.USB_FlushTxFifo) i.USB_GetMode 0x08004a14 Section 0 stm32f1xx_ll_usb.o(i.USB_GetMode) i.USB_ReadDevAllInEpInterrupt 0x08004a1e Section 0 stm32f1xx_ll_usb.o(i.USB_ReadDevAllInEpInterrupt) i.USB_ReadDevAllOutEpInterrupt 0x08004a32 Section 0 stm32f1xx_ll_usb.o(i.USB_ReadDevAllOutEpInterrupt) i.USB_ReadDevInEPInterrupt 0x08004a46 Section 0 stm32f1xx_ll_usb.o(i.USB_ReadDevInEPInterrupt) i.USB_ReadDevOutEPInterrupt 0x08004a78 Section 0 stm32f1xx_ll_usb.o(i.USB_ReadDevOutEPInterrupt) i.USB_ReadInterrupts 0x08004a90 Section 0 stm32f1xx_ll_usb.o(i.USB_ReadInterrupts) i.USB_ReadPacket 0x08004a9c Section 0 stm32f1xx_ll_usb.o(i.USB_ReadPacket) i.USB_SetCurrentMode 0x08004ac4 Section 0 stm32f1xx_ll_usb.o(i.USB_SetCurrentMode) i.USB_SetDevAddress 0x08004af4 Section 0 stm32f1xx_ll_usb.o(i.USB_SetDevAddress) i.USB_SetDevSpeed 0x08004b18 Section 0 stm32f1xx_ll_usb.o(i.USB_SetDevSpeed) i.USB_WritePacket 0x08004b28 Section 0 stm32f1xx_ll_usb.o(i.USB_WritePacket) i.__0sprintf$bare 0x08004b58 Section 0 printfb.o(i.__0sprintf$bare) i.__scatterload_copy 0x08004b7c Section 14 handlers.o(i.__scatterload_copy) i.__scatterload_null 0x08004b8a Section 2 handlers.o(i.__scatterload_null) i.__scatterload_zeroinit 0x08004b8c Section 14 handlers.o(i.__scatterload_zeroinit) i._printf_core 0x08004b9a Section 0 printfb.o(i._printf_core) _printf_core 0x08004b9b Thumb Code 34 printfb.o(i._printf_core) i._sputc 0x08004bbc Section 0 printfb.o(i._sputc) _sputc 0x08004bbd Thumb Code 10 printfb.o(i._sputc) i.crypto 0x08004bc8 Section 0 usbd_cdc_if.o(i.crypto) i.free 0x08004da4 Section 0 malloc.o(i.free) i.kvarz_err 0x08004df4 Section 0 main.o(i.kvarz_err) i.main 0x08004e88 Section 0 main.o(i.main) .constdata 0x08005394 Section 20 stm32f1xx_hal_rcc.o(.constdata) Дальше основная программа: i.main_loop 0x08008000 Section 0 main_loop.o(i.main_loop) .constdata 0x080081e4 Section 260 main_loop.o(.constdata) i.init 0x08009000 Section 0 main_init.o(i.init) i.LED_blink_green 0x0800b800 Section 0 commands.o(i.LED_blink_green) i.LED_blink_yello 0x0800b828 Section 0 commands.o(i.LED_blink_yello) i.READ_BUF_EEPROM 0x0800b848 Section 0 commands.o(i.READ_BUF_EEPROM) i.SAVE_BUF_EEPROM 0x0800b9ac Section 0 commands.o(i.SAVE_BUF_EEPROM) i.boof_eber_error 0x0800d45c Section 0 eber.o(i.boof_eber_error) i.call_eber_error 0x0800d58c Section 0 eber.o(i.call_eber_error) i.dated 0x0800d668 Section 0 mb_can.o(i.dated) i.datederr 0x0800d694 Section 0 mb_can.o(i.datederr) i.datet 0x0800dbb8 Section 0 eber.o(i.datet) i.dateterr 0x0800dbe4 Section 0 eber.o(i.dateterr) i.nexus 0x0800df7c Section 0 mb_can.o(i.nexus) i.read_eber_data 0x0800dfc8 Section 0 eber.o(i.read_eber_data) .constdata 0x0800e698 Section 512 eber.o(.constdata) Дальше переменные: .data 0x20000000 Section 44 usbd_cdc_if.o(.data) .data 0x2000002c Section 17 main.o(.data) .data 0x20000040 Section 52 usbd_desc.o(.data) .data 0x20000074 Section 271 usbd_cdc.o(.data) USBD_CDC_DeviceQualifierDesc 0x20000074 Data 10 usbd_cdc.o(.data) .data 0x20000183 Section 1 usbd_ctlreq.o(.data) cfgidx 0x20000183 Data 1 usbd_ctlreq.o(.data) .data 0x20000184 Section 4 stm32f1xx_hal.o(.data) uwTick 0x20000184 Data 4 stm32f1xx_hal.o(.data) .data 0x20000188 Section 20 system_stm32f1xx.o(.data) .data 0x2000019c Section 4 mvars.o(.data) .bss 0x200001a0 Section 2000 usbd_cdc_if.o(.bss) .bss 0x20000970 Section 548 usb_device.o(.bss) .bss 0x20000b94 Section 592 main.o(.bss) can1TxMessage 0x20000d04 Data 52 main.o(.bss) can1RxMessage 0x20000d38 Data 60 main.o(.bss) can2TxMessage 0x20000d74 Data 52 main.o(.bss) can2RxMessage 0x20000da8 Data 60 main.o(.bss) .bss 0x20000de4 Section 512 usbd_desc.o(.bss) .bss 0x20000fe4 Section 1476 usbd_conf.o(.bss) mem 0x2000138c Data 540 usbd_conf.o(.bss) .data 0x20008000 Section 48 main_loop.o(.data) .data 0x20008030 Section 4 mb_can.o(.data) .data 0x20008034 Section 1 eber.o(.data) .bss 0x20008038 Section 3732 main_loop.o(.bss) .bss 0x20008ecc Section 64 mb_can.o(.bss) STACK 0x2000fbe0 Section 1024 startup_stm32f105xc.o(STACK) Вот область хранения переменных для глобальной инициализации. Она располагается ниже основной программы, блокируя возможность нормальной загрузки обновляемой программы: Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0800e898, Size: 0x000015a8, Max: 0x00008000, ABSOLUTE, COMPRESSED[0x000000c8]) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x20000000 COMPRESSED 0x0000002c Data RW 13 .data usbd_cdc_if.o 0x2000002c COMPRESSED 0x00000011 Data RW 254 .data main.o 0x2000003d COMPRESSED 0x00000003 PAD 0x20000040 COMPRESSED 0x00000034 Data RW 313 .data usbd_desc.o 0x20000074 COMPRESSED 0x0000010f Data RW 952 .data usbd_cdc.o 0x20000183 COMPRESSED 0x00000001 Data RW 1254 .data usbd_ctlreq.o 0x20000184 COMPRESSED 0x00000004 Data RW 2057 .data stm32f1xx_hal.o 0x20000188 COMPRESSED 0x00000014 Data RW 3852 .data system_stm32f1xx.o 0x2000019c COMPRESSED 0x00000004 Data RW 4201 .data mc_w.l(mvars.o) 0x200001a0 - 0x000007d0 Zero RW 12 .bss usbd_cdc_if.o 0x20000970 - 0x00000224 Zero RW 193 .bss usb_device.o 0x20000b94 - 0x00000250 Zero RW 253 .bss main.o 0x20000de4 - 0x00000200 Zero RW 312 .bss usbd_desc.o 0x20000fe4 - 0x000005c4 Zero RW 451 .bss usbd_conf.o Execution Region RW_IRAM2 (Exec base: 0x20008000, Load base: 0x0800e960, Size: 0x00000f0c, Max: 0x00004000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x20008000 0x0800e960 0x00000030 Data RW 630 .data main_loop.o 0x20008030 0x0800e990 0x00000004 Data RW 752 .data mb_can.o 0x20008034 0x0800e994 0x00000001 Data RW 885 .data eber.o 0x20008035 0x0800e995 0x00000003 PAD 0x20008038 - 0x00000e94 Zero RW 628 .bss main_loop.o 0x20008ecc - 0x00000040 Zero RW 751 .bss mb_can.o В общем сам склоняюсь к разделению проекта на 2 части. Это будет проще ручной инициализации переменных, в случае отключения __main в startup_stm32f105xc.s Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 1 час назад, Elektrons4eg сказал: Дальше основная программа: Теперь в самом её начале (сразу после точки передачи управления) ставите в MPU полную защиту от доступа на адресное пространство до 0x8008000 и... сильно удивляетесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrons4eg 0 30 октября, 2019 Опубликовано 30 октября, 2019 (изменено) · Жалоба 14 минут назад, jcxz сказал: Теперь в самом её начале (сразу после точки передачи управления) ставите в MPU полную защиту от доступа на адресное пространство до 0x8008000 и... сильно удивляетесь. В моём STM32F105 отсутствует MPU. Подозреваю, что программа свалится в MemManage_Handler, так как в загрузчике крутится прерывание таймера. Изменено 30 октября, 2019 пользователем Elektrons4eg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 1 hour ago, Elektrons4eg said: Дальше основная программа Так где отдельный экземпляр библиотек? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 30 октября, 2019 Опубликовано 30 октября, 2019 · Жалоба 1 час назад, Elektrons4eg сказал: Подозреваю, что программа свалится в MemManage_Handler, так как в загрузчике крутится прерывание таймера. Не только прерывание, а и куча других функций/данных. Посмотрите на свой же .map. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться