Взаимодействие Си и Асма
Нужна помощь квалифицированного специалиста...
Как в ассемблере воспользоваться именем переменной, объявленной в Си. То есть нужно написать:
AsmMyStruct_X .equ _MyStruct.X
Когда я пишу
AsmX .equ _X
то это работает, но как обратиться к элементу структуры? Си не генерирует переменной с подчеркианием для нее, а смещение от начала структуры зависит от того, как это выравнилось в памяти при линковке.
Заранее спасибо
Си не генерирует переменной с подчеркианием для нее, а смещение от начала структуры зависит от того, как это выравнилось в памяти при линковке.
Для "межкомпиляторных" типов данных, как правило, отключают выравнивание, чтобы не иметь геморроя. Посмотри, например, на WinAPI - все зарезервированные поля заданы явно.
Для "межкомпиляторных" типов данных, как правило, отключают выравнивание, чтобы не иметь геморроя. Посмотри, например, на WinAPI - все зарезервированные поля заданы явно.
Не все так просто...
Если первый элемент слово, а второй двойное слово, то первый ложится как хочет, а второй только с четного адреса, то есть пространство в слово между ними может возникать произвольно.
Это микроконтроллер и в силу его аппаратной архитектуры двойное слово читается только с четного адреса.
Для получения всегда четных адресов можно включить выравнивание, но памяти данных в контроллере мало, а тогда слова будут тоже выравниваться по четному адресу. То есть основной тип переменной будет занимать двойной объем памяти.
Если первый элемент слово, а второй двойное слово, то первый ложится как хочет, а второй только с четного адреса, то есть пространство в слово между ними может возникать произвольно.
Даже если это микроконтроллер, он по определению ничего хотеть не может. Наверняка существуют четкие правила размещения данных. Тебе надо выбрать соответствующую схему адресации и описать упакованные типы с вручную зарезервированными полями пропусков.