Staticmem
Вторник 8 мая 2018 г. 1:32
У меня есть "generic_boot20_pb9.Bin "загрузочный загрузчик, установленная на LC Studio STM32F103RBT6.
Чтобы проверить это, я использовал общий пример Blink STM32F103R после изменения светодиодного штифта. Это наносится нормально, и я могу использовать загрузочный загрузчик, чтобы прошить его под Arduino, поэтому, похоже, это работает нормально.
У меня есть программа, которую я написал, которая построена с GCC и использует STM32F10X_STDPERIPH_LIB_V3.5.0 библиотека и драйверы USB, которые они предоставляют. Я могу построить и прошить двоичный файл, используя STM32Flash через последовательный порт или используя ST-Flash через ST-Link, и он мигает и работает нормально. Моя программа использует USB, и при подключении A /Dev /TTYACMX создается устройство.
У меня есть пара вопросов...
Перед тем, как загрузчик передает элемент управления в прошивше? Программа Blink, по -видимому, обладает поддержкой TTYACM в рамках сборки, и я вижу это, но с помощью моего приложения GCC я не вижу своего устройства ttyacm.
Другой вопрос, вероятно, у меня проблема, но я не уверен, что мне нужно сделать. Когда загрузочный загрузчик работает по адресу 0x08000000, Arduino изменяет адрес связывания кода, так что эскизы собираются для другого адреса, когда программист установлен для использования загрузчика загрузчика? Я считаю, что информация по строительству Arduino IDE, которая выводит очень запутанную, настолько сложно узнать, с чего начать смотреть, чтобы увидеть, какой адрес загрузки он использует.
Мое приложение использует файл загрузки линкера "STM32_Flash.Ld ". Внутри этого есть:
Чтобы проверить это, я использовал общий пример Blink STM32F103R после изменения светодиодного штифта. Это наносится нормально, и я могу использовать загрузочный загрузчик, чтобы прошить его под Arduino, поэтому, похоже, это работает нормально.
У меня есть программа, которую я написал, которая построена с GCC и использует STM32F10X_STDPERIPH_LIB_V3.5.0 библиотека и драйверы USB, которые они предоставляют. Я могу построить и прошить двоичный файл, используя STM32Flash через последовательный порт или используя ST-Flash через ST-Link, и он мигает и работает нормально. Моя программа использует USB, и при подключении A /Dev /TTYACMX создается устройство.
У меня есть пара вопросов...
Перед тем, как загрузчик передает элемент управления в прошивше? Программа Blink, по -видимому, обладает поддержкой TTYACM в рамках сборки, и я вижу это, но с помощью моего приложения GCC я не вижу своего устройства ttyacm.
Другой вопрос, вероятно, у меня проблема, но я не уверен, что мне нужно сделать. Когда загрузочный загрузчик работает по адресу 0x08000000, Arduino изменяет адрес связывания кода, так что эскизы собираются для другого адреса, когда программист установлен для использования загрузчика загрузчика? Я считаю, что информация по строительству Arduino IDE, которая выводит очень запутанную, настолько сложно узнать, с чего начать смотреть, чтобы увидеть, какой адрес загрузки он использует.
Мое приложение использует файл загрузки линкера "STM32_Flash.Ld ". Внутри этого есть:
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
Rogerclark
Вторник 8 мая 2018 г., 4:31
Вам нужно изменить адрес векторной таблицы и основание Flash на
0x8002000
я.e Это не только файл линкера, который необходимо изменить
0x8002000
я.e Это не только файл линкера, который необходимо изменить
Staticmem
Вторник 8 мая 2018 г. 6:01
Файл линкера, который я использую, от STM32F10X_STDPERIPH_LIB_V3.5.0 Библиотека.
STM32F10X_STDPERIPH_LIB_V3.5.0/project/stm32f10x_stdperiph_template/truestudio/stm3210b-eval/stm32_flash.лд
Этот линкер-файл является единственным, который, кажется, совместим с моей цепочкой инструментов (Arm-None-Eabi).
STM32F10X_STDPERIPH_LIB_V3.5.0/project/stm32f10x_stdperiph_template/truestudio/stm3210b-eval/stm32_flash.лд
Этот линкер-файл является единственным, который, кажется, совместим с моей цепочкой инструментов (Arm-None-Eabi).
/* The startup code goes first into FLASH */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH
Rogerclark
Вторник 8 мая 2018 г., 6:03
Адрес векторной таблицы где -то совершенно другое в SPL.
Просто используйте свой редактор для поиска вектора, он должен что -то найти, и он, вероятно, будет установлен на 0x8000000
Просто используйте свой редактор для поиска вектора, он должен что -то найти, и он, вероятно, будет установлен на 0x8000000
Staticmem
Вторник 8 мая 2018 г. 8:04
Был в этом весь день и никуда не добраться.
Я могу найти много совпадений для вектора, используя GREP, но единственные, которые я вижу, имеют смысл в каком -либо смысле ».LSL «Файлы, такие как STM32F10X_STDPERIPH_TEMPLATE/HITOP/STM3210B-EVAL/STURTS/STM32F10X_MD.LSL
Там есть:
Я могу найти много совпадений для вектора, используя GREP, но единственные, которые я вижу, имеют смысл в каком -либо смысле ».LSL «Файлы, такие как STM32F10X_STDPERIPH_TEMPLATE/HITOP/STM3210B-EVAL/STURTS/STM32F10X_MD.LSL
Там есть:
#ifndef __VECTOR_TABLE_ROM_ADDR
# define __VECTOR_TABLE_ROM_ADDR 0x08000000
#endif
Эдогальдо
Вторник 8 мая 2018 г. 8:06 утра
Как правило, у вас должен быть -dvect_tab_addr = 0x8002000 (или что -то подобное) в команде компилятора.
Редактировать: я бы сказал -d__vector_table_rom_addr = 0x08002000 для SPL
Редактировать: я бы сказал -d__vector_table_rom_addr = 0x08002000 для SPL
Staticmem
Вторник 8 мая 2018 г. 8:43 утра
[Эдогальдо - Вторник 8 мая 2018 г. 8:06 утра] - Как правило, у вас должен быть -dvect_tab_addr = 0x8002000 (или что -то подобное) в команде компилятора.Но разве это не для того, чтобы просто определить значение для исходных файлов, чтобы использовать? Вся идея линкера, которую, как я думал, заключалась в том, чтобы объединить скомпилированный код LIB для выполнения по конкретному адресу, так что должна быть просто выпуск линкера.
Редактировать: я бы сказал -d__vector_table_rom_addr = 0x08002000 для SPL
Эдогальдо
Вторник 8 мая 2018 12:13
Хорошо, как я вижу, ядро STM32Duino использует разные .LD -файлы для перезабоченности кода; я.эн. Доски.TXT для варианта Maple Mini (с новой опцией загрузчика) используется:
mapleMini.menu.bootloader_version.bootloader20.build.ldscript=ld/bootloader_20.ld
Staticmem
Вторник 8 мая 2018 12:34
Эдогальдо написал:
Память
{
ОЗУ (RWX): Origin = 0x20000000, длина = 20K
ROM (RX): Origin = 0x08002000, длина = 120K
}
{
ОЗУ (RWX): Origin = 0x20000000, длина = 20K
ROM (RX): Origin = 0x08002000, длина = 120K
}
Эдогальдо
Вторник 8 мая 2018 г. 13:02
мммм...
Я смотрю на SPL_F1 V. 3.5.0 И я не могу найти никакого определения для __VECTOR_TABLE_ROM_ADDR..
Вместо этого я вижу:
Я смотрю на SPL_F1 V. 3.5.0 И я не могу найти никакого определения для __VECTOR_TABLE_ROM_ADDR..
Вместо этого я вижу:
#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
[...]
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
[...]
Staticmem
Вторник 8 мая 2018 г. 13:38
[Эдогальдо - Вторник 8 мая 2018 г. 13:02] - мммм...$ CD STM32F10X_STDPERIPH_LIB_V3.5.0
Я смотрю на SPL_F1 V. 3.5.0 И я не могу найти никакого определения для __VECTOR_TABLE_ROM_ADDR..
$ grep -r __vector_table_rom_addr *
118 совпадений найдены.
Эдогальдо
Вторник 8 мая 2018 г. 13:55
Хорошо, в любом случае, это кажется посвященным Hitop IDE, которая, кажется, старая IDE.
РЕДАКТИРОВАТЬ: В разделе примеров NVIC есть пример перемещения векторной таблицы..
РЕДАКТИРОВАТЬ: В разделе примеров NVIC есть пример перемещения векторной таблицы..
Rogerclark
Вторник 8 мая 2018 г. 8:43 вечера
КСТАТИ.
Вам не нужно менять базовый адрес ОЗУ, он’S только для очень старого загрузчика Maple, который поддерживает загрузку в ОЗУ
Эта опция была удалена в загрузчике STM32Duino, и эта оперативная память была бесплатной’заправить и отдать на эскиз приложения
Вам не нужно менять базовый адрес ОЗУ, он’S только для очень старого загрузчика Maple, который поддерживает загрузку в ОЗУ
Эта опция была удалена в загрузчике STM32Duino, и эта оперативная память была бесплатной’заправить и отдать на эскиз приложения
Staticmem
Ср. 09 мая 2018 г. 1:53
[Эдогальдо - Вторник 8 мая 2018 г. 13:55] - Хорошо, в любом случае, это кажется посвященным Hitop IDE, которая, кажется, старая IDE.(Редактировать Hitop -> Файл загрузки TrueStudio) был единственным, который будет работать для меня без каких -либо изменений, так как я думаю, что он использовал стандартные файлы загрузки GCC, где, как и другие, кажется, там делают это, и/или различные цепочки инструментов.
РЕДАКТИРОВАТЬ: В разделе примеров NVIC есть пример перемещения векторной таблицы..
РЕДАКТИРОВАТЬ: НЕТ «HITOP» был Fluestudio Load Files, которые работали из коробки для меня.
Я иду в память, как это было 7 лет назад, и я никогда не использовал ни одного из IDE, и только в последнее время использовал Arduino, но не для этого проекта. Я не думаю, что ST когда -либо поставлял примеры построения командной строки, поэтому мне пришлось выработать все свои собственные make -файлы, чтобы соответствовать использованию командной строки GCC.
@Rogerclark: отметил!
Я сделаю еще один ход сегодня. Я действительно хочу получить опцию загрузчика даже 7 лет назад.
Staticmem
Ср 09 мая 2018 г., 3:21
Эдогальдо написал:
РЕДАКТИРОВАТЬ: В разделе примеров NVIC есть пример перемещения векторной таблицы..
Staticmem
Ср 9 мая 2018 г., 4:03
Я думаю, что сейчас работает. Частью проблемы была мой тестовый код, который я добавил в флеш -светодиоды, я не инициализировал прерывание таймера.
До сих пор единственное изменение было в файле нагрузки: Flash (RX): Origin = 0x08002000, длина = 128K-8K
Я отмечу эту ветку как [решен] позже, после того, как я прошел еще несколько тестирования.
До сих пор единственное изменение было в файле нагрузки: Flash (RX): Origin = 0x08002000, длина = 128K-8K
Я отмечу эту ветку как [решен] позже, после того, как я прошел еще несколько тестирования.
Staticmem
Ср 09 мая 2018 г., 5:50 утра
Staticmem написал:Я отмечу эту ветку как [решен] позже, после того, как я прошел еще несколько тестирования.
Rogerclark
Ср. 09 мая 2018 г., 5:54
Да
Посмотрите в ядре Libmaple, вы должны поместить PA12 в режим GPIO и поднять его высоко или низко (я не могу вспомнить, что), что -то вроде 500US
Это взлом, а не официальный способ навязать перечисление, но обычно он работает
Посмотрите в ядре Libmaple, вы должны поместить PA12 в режим GPIO и поднять его высоко или низко (я не могу вспомнить, что), что -то вроде 500US
Это взлом, а не официальный способ навязать перечисление, но обычно он работает
Эдогальдо
Ср 9 мая 2018 г., 5:55 утра
До сих пор единственное изменение было в файле нагрузки: Flash (RX): Origin = 0x08002000, длина = 128K-8K
Вы также заметили
#define VECT_TAB_OFFSET 0x3000
Staticmem
Чт 10 мая 2018 г., 4:33
Эдогальдо написал:
Вы также заметили
#define VECT_TAB_OFFSET 0x3000
Rogerclark
Чт 10 мая 2018 г., 4:34
Прохладный