Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

так нада

Отправлено koyodza 05 июля 2008 г. 19:18
В ответ на: зачем макрос?!, когда есть строковые стандартные функции типа atoi отправлено <font color=gray>kan</font> 05 июля 2008 г. 18:47

1. это 51, ресурсов не так много, чтобы создавать без надобности строки, вызывать ненужные функции и т.д.

2. я делал (без itoa!) так:
х = *((DWORD*)("1234"));
но в этом случае код на два десятка байт больше, чем при
х = 0x31323334UL;
в первом случае строка располагается в памяти, а при вызове х = *((DWORD*)("1234")) берется указатель на эту строку, и оттуда происходит копирование. Во втором случае прямо в регистры грузятся константы

3. Мне строка нужна не произвольной длины, а точно 4 символа, и эти символы упакованы в DWORD

4. Запись "в лоб" типа х = 0x31323334UL мягко говоря, не отличается наглядностью

5. Сейчас пользуюсь макросом
#define CHAR2DWORD(a,b,c,d) ((((DWORD)(BYTE)(a))<<24UL)|((DWORD)(BYTE)(b)<<16UL)|((DWORD)(BYTE)(c)<<8UL)|((DWORD)(BYTE)(d)))

он дает нужный результат, но его использование тоже не слишком удобно - нужно писать так:
х = CHAR2DWORD('В', 'х', '1', ' ');

Хочу макрос, чтобы его использование выглядело так:
х = CHAR2DWORD("Вх1 ");
или так
х = CHAR2DWORD(Вх1 );


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 3 на единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru