реклама на сайте
подробности

 
 
> Доступ к полям структуры С из ASM, AVR studio, WinAVR
Vitёk
сообщение Mar 6 2008, 09:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 17-01-05
Из: Ростов-на-Дону
Пользователь №: 2 018



В основном теле программы, написанной на С, используется экземпляр структуры, примерно так:
Код
    // описание структуры
    struct TStored
    {
        ....
        volatile unsigned short var_1;
        ....
    };

    // экземпляр
    struct TStored strd;
    // ....
    strd.var_1 = 0x1234;


И есть процедура обработки прерывания, написанная на АСМе (файл типа *.s), откуда необходимо получить доступ к полю var_1 структуры strd. Я безуспешно пытался сделать это несколькими способами, насколько хватило фантазии. Сейчас пребываю в тупике.

Подскажите, можно ли это сделать, и если да, то как?


--------------------
/* Всё хорошо в меру. */
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kirill Frolov
сообщение Mar 7 2008, 11:43
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(Vitёk @ Mar 6 2008, 12:42) *
Код
    // описание структуры
    struct TStored
    {
        ....
        volatile unsigned short var_1;
        ....
    };

    // экземпляр
    struct TStored strd;
    // ....
    strd.var_1 = 0x1234;


И есть процедура обработки прерывания, написанная на АСМе (файл типа *.s), откуда необходимо получить доступ к полю var_1 структуры strd.


Надо знать все sizeof на целевой платформе, так и правила выравниания. Вобщем чаще -- это фантастика. Разве что НА C где-то предварительно посчитать что-то вроде (uintptr_t)&(((struct s*)0)->v) и передать каким-то образом в ассемблер.



Цитата(Vitёk @ Mar 7 2008, 12:36) *
Компилятор у меня WinAVR (указано в комментарии к названию темы).


Компилятор у тебю -- GCC. Афтар не в теме.

Цитата(Vitёk @ Mar 7 2008, 11:41) *
Есть только один момент: при внесении изменений в структуру (а такое иногда бывает), приходится заново вычислять смещение для некоторых её полей (вручную), и менять соотв. дефайны. При создании темы у меня была надежда, что описание структуры (в .h-файле) можно скормить компилятору, что бы он сам проделывал эту работу. Сбыться ей, судя по всему, не судьба.


Ну для тех у кого WinAVR -- не судьба. А так вообще любой вменяемый компилятор (из всех перевиданных мною) заставить при желании вполне возможно. Я выше -- написал как. Вначале генерируется *.inc для ассемблера на основе выше приведённых конструкций с приведением NULL к типу структуры. Потом ассемблируется с полученным *.inc. Написать Makefile соответствующий не сложно.

Цитата
У меня были проблемы с порядком размещения полей в структуре, от которых удалось избавиться при помощи #pragma pack.


Вместо которых в GCC атрибуты...

Сообщение отредактировал Kirill Frolov - Mar 7 2008, 11:37


--------------------
[ZX]
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vitёk   Доступ к полям структуры С из ASM   Mar 6 2008, 09:42
- - GDI   Как вариант попробовать разместить структуру по фи...   Mar 6 2008, 09:52
|- - Vitёk   Цитата(GDI @ Mar 6 2008, 12:52) Вы бы рас...   Mar 6 2008, 10:09
- - Vitёk   Решил проблему, относительно красиво. 1. Поместил...   Mar 6 2008, 12:02
|- - SasaVitebsk   Цитата(Vitёk @ Mar 6 2008, 16:02) Решил п...   Mar 6 2008, 22:27
|- - zltigo   Цитата(Vitёk @ Mar 6 2008, 15:02) 2. Окай...   Mar 6 2008, 23:00
- - Vitёk   SasaVitebsk: Да, примерно так так в конце концов ...   Mar 7 2008, 08:41
|- - SasaVitebsk   Цитата(Vitёk @ Mar 7 2008, 12:41) Есть то...   Mar 7 2008, 08:56
|- - zltigo   Цитата(Vitёk @ Mar 7 2008, 11:41) Вот сам...   Mar 7 2008, 12:08
- - Vitёk   Компилятор у меня WinAVR (указано в комментарии к ...   Mar 7 2008, 09:36
- - Vitёk   ЦитатаУ меня были проблемы с порядком размещения п...   Mar 7 2008, 12:59
|- - Kirill Frolov   Цитата(Vitёk @ Mar 7 2008, 15:59) ЦитатаН...   Mar 11 2008, 08:19
|- - mdmitry   Цитата(Kirill Frolov @ Mar 11 2008, 11:19...   Mar 11 2008, 09:20
- - umup   ЦитатаДокументацию на WinAVR в частности просто не...   Mar 11 2008, 10:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 08:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016