Jump to content

    
Sign in to follow this  
Elektrons4eg

Keil и функция глобальной инициализации переменных __main.

Recommended Posts

Приветствую. Подскажите пожалуйста, где в Keil расположен __main.  И можно ли изменить адресацию области хранения данных для глобальной инициализации переменных? Пишу программу с загрузчиком в одном проекте. Загрузчик расположил в начале, за ним эмуляция ЕЕПРОМ, и основная программа. При компиляции область хранения данных для глобальной инициализации переменных оказывается ниже основной программы. Какие есть варианты решения проблемы, если на функцию __main повлиять нельзя? В загрузчике расположен USB_CDC стёк. Думаю можно самому инициализировать переменные, но может есть способ менее затратный по времени?

Edited by Elektrons4eg

Share this post


Link to post
Share on other sites

С кейлом не работаю, но из сообщений на этом форуме знаю, что все это делается через scatter-файл (это вам ключевое слово для поиска). От себя могу заметить, что совмещать загрузчик и программу в одном проекте - очень неудачное решение. Вот тут разбирали, почему.

Share this post


Link to post
Share on other sites

Скаттер я настроил, отдельные секции для кода и данных. Но в его хелпе по своей проблеме ответ пока не нашёл. Это мой первый проект в кейле для STM32, возможно решение совмещения  неудачное. Но на момент создания проекта казалось самым простым из всех возможных.

Share this post


Link to post
Share on other sites
2 минуты назад, Elektrons4eg сказал:

Это мой первый проект в кейле для STM32, возможно решение совмещения  неудачное.

И какие гарантии, что из получившегося кода загрузчика не будет обращений к функциям или константам в основной программе?

Share this post


Link to post
Share on other sites

У загрузчика и основной программы разные секции для кода и данных. После проверки целостности основной программы, загрузчик передаёт её управление один раз (в начало секции кода основной программы). Основная программа работает без прерываний и обращений к коду загрузчика. Всё это настроено и отлично работает. Пытался в скаттере указать секцию с __main.o, результат отрицательный - warning: L6314W: No section matces pattern __main.o(RO)

Edited by Elektrons4eg

Share this post


Link to post
Share on other sites
1 минуту назад, Elektrons4eg сказал:

У загрузчика и основной программы разные секции для кода и данных.

И что? Да хоть 10 разных секций.

1 минуту назад, Elektrons4eg сказал:

После проверки целостности основной программы, загрузчик передаёт её управление один раз. Основная программа работает без прерываний и обращений к коду загрузчика.

Это Вам так кажется. Компилятор запросто может объединить часть кода или данных основной программы и загрузчика. Так как компилится всё вместе. И когда загрузчик попытается стереть основную программу для обновления, он сотрёт часть себя.

Share this post


Link to post
Share on other sites
2 минуты назад, jcxz сказал:

Это Вам так кажется. Компилятор запросто может объединить часть кода или данных основной программы и загрузчика. Так как компилится всё вместе. И когда загрузчик попытается стереть основную программу для обновления, он сотрёт часть себя.

Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map.

Share this post


Link to post
Share on other sites
7 минут назад, Elektrons4eg сказал:

Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map.

Во-первых: по .map-у это практически невозможно увидеть.

Во-вторых: если сегодня нет, то нет никакой гарантии что завтра, после малейшей правки кода или изменении версии компилятора или его опций, этого не возникнет.

Share this post


Link to post
Share on other sites
4 hours ago, Сергей Борщ said:

От себя могу заметить, что совмещать загрузчик и программу в одном проекте - очень неудачное решение.

Вот да, нажить проблем на ровном месте. Собственно, они уже начались, хотя еще ничего и не готово.

Share this post


Link to post
Share on other sites
3 часа назад, Elektrons4eg сказал:

Уверяю, это не так. В подтверждение могу показать сгенерированный компиляцией map.

Покажите в нем отрывки с отдельными копиями библиотечных функций для загрузчика и приложения. 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
1 час назад, Elektrons4eg сказал:

Дальше основная программа:

Теперь в самом её начале (сразу после точки передачи управления) ставите в MPU полную защиту от доступа на адресное пространство до 0x8008000 и... сильно удивляетесь.  :wink:

 

Share this post


Link to post
Share on other sites
14 минут назад, jcxz сказал:

Теперь в самом её начале (сразу после точки передачи управления) ставите в MPU полную защиту от доступа на адресное пространство до 0x8008000 и... сильно удивляетесь.  :wink:

В моём STM32F105 отсутствует MPU.

Подозреваю, что программа свалится в MemManage_Handler, так как в загрузчике крутится прерывание таймера.

Edited by Elektrons4eg

Share this post


Link to post
Share on other sites
1 час назад, Elektrons4eg сказал:

Подозреваю, что программа свалится в MemManage_Handler, так как в загрузчике крутится прерывание таймера.

Не только прерывание, а и куча других функций/данных. Посмотрите на свой же .map.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this