Как поместить функцию C в некоторый диапазон адресов - PullRequest
1 голос
/ 28 октября 2010

Я разрабатываю загрузчик на основе USB для микроконтроллеров семейства HCS08. У меня есть код загрузчика в сборке (который отлично работает для последовательной связи). Я вызываю функции C для связи через USB (терминал <> Micro controller) из этого кода сборки. Однако, кажется, что эти функции C не находятся в ПЗУ защищенной области, я вижу это в project.map. Они не преемственны с моим кодом загрузчика, т.е. мой код загрузчика начинается с F003, но эти функции USB в некоторых ~ 1000-2000. У меня вопрос, как я могу заставить эти функции C продолжить работу с кодом bootloader.asm в ПЗУ.

Вот поток программы: у меня есть основная функция C, которая при включении переходит к bootloader.asm. Хотя bootloader.asm работает нормально, но из-за подпрограмм USB в незащищенной области ПЗУ они также удаляются, и после этого загрузчик не может связаться с моим терминалом.

Любое предложение на этот счет будет очень полезно.

Спасибо

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Когда вы создаете код для встроенной системы, вы обычно используете «компоновщик / локатор» вместо просто компоновщика.Часть «локатор» означает, что она позволяет вам устанавливать параметры, которые сообщают ему, по каким адресам должна быть расположена память.К сожалению, я не могу сказать вам точно, как указать это с помощью набора инструментов, который вы используете.Если вы сообщите нам, что это за набор инструментов, возможно, кто-то, кто (в отличие от меня) использовал его, узнает подробности указания адреса для используемого вами локатора.

0 голосов
/ 28 октября 2010

Если вы используете gcc + binutils, вам нужен собственный скрипт компоновщика .Это даст вам явный контроль над тем, как ваша связанная программа размещается в памяти.Сложнее всего найти стандартный скрипт для вашей платформы, если вы просто хотите внести несколько изменений.Сценарий генерируется при сборке ld (часть binutils) и затем внедряется в ld.Часто его можно найти с помощью strings ld и поиска по слову "section" или другому ключевому слову скрипта общего компоновщика.

Скрипт стокового компоновщика может быть очень сложным для поддержки всех функций GCC, включая отладку, C ++статические инициализаторы, данные только для чтения, перемещение и т. д.

...