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

 
 
> Положение поля в классе
Ivan.
сообщение Oct 9 2008, 05:48
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 13-02-07
Пользователь №: 25 325



Как получить Offset поля в классе?
Впринципе это вопрос общего назначения, но для уточнения, я пишу под WinAVR.
При применении ассемблерных вставок в C++ для работы со структурами появляется необходимость взятия переменной относительно какого-то объекта (указателя), например:
LDD R0, Y+OFFSET(T::i)
Написал define:
#define OFFSETT(Type, Item) ((int)(&((Type *)0)->Item))
Что впринципе и возврящает необходимую константу. В С++ такой прикол проканывает, в асме старого компилятора тоже, а в новом начинает через один ворчать, мол не константа это.
Подскажите, может есть какие нибудь иные способы решения?


--------------------
Я могу ВСЁ, вопрос, сколько времени у меня это займет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ivan.
сообщение Oct 28 2008, 07:06
Сообщение #2





Группа: Участник
Сообщений: 7
Регистрация: 13-02-07
Пользователь №: 25 325



Цитата
Сорри за нескромный вопрос. Для чего Вы хотите смешать C++ с asm? Ведь от этого только переносимость и читаемость кода пострадает. Выигрышь в производительности весьма сомнительный.
Согласен, совместимость и читабельность ухудьшается, а выигрыш довольно большой. Даже если взять текуший отлаженный, вылизанный ассемблерный код и перевести его на С/С++ диву даешься, что компилятор вытваряет, сердце кровью обливается. Я тут такты экономлю, а он такой код раздувает.
Задача, каторую я решаю - это протокол на основе RS485 интерфейса работающий на скорости 115200.
Это давольно умный протокол в катором все устройства являются главными и могут говорить в любой момент кому угодно. Для таких возможностей появляется необходимость выявления занятости линии и определения кализий на линии. Каждый контроллер должен успевать, по приему каждого байта, определять кому, от кого летит пакет, подсчитывать контрольную сумму и так далее.
А теперь представим, что у главного контроллера есть два таких интерфейса, и по обоим летят пакеты и все это нужно успеть при тактовой чистоте 14МГц. При старой организации на С, в самых сложных случаях (когда контроллер передает в оба интерфейса одновременно, а значит и принимает для определения кализий) это занимало 2/3 процессорного времени, а сейчас 1/3. Объем кода снижен с 5К до 2К, а для atmega8 это существенно.


--------------------
Я могу ВСЁ, вопрос, сколько времени у меня это займет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 21:56
Рейтинг@Mail.ru


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