GetSmart 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Допустим я объявил так значение #define BUF_LIMIT 128 и хочу написать внутри сишного кода в операторе asm("ADD R10,#BUF_LIMIT") Но т.к. внутри оператора asm-а находится строка, то препроцессор не заменяет внутри неё предефайненные символы. Как быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Как быть? На выбор: загрузить BUF_LIMIT заранее в локальную переменную не увлекаться инлайн ассемблером взять компилятор, который позволяет такие финты (например, RVCT) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 (изменено) · Жалоба А может существует универсальный вариант со Stringizing Operator (#) внутри #define? Я немного попытался, но с первого раза не получилось. Может кто-нить знает как? Пускай даже это будет выглядеть немного криво, но лишь бы работало. Дело в том, что в asm() внутри одной строки можно её порезать на несколько строк типа asm("MOV " "R15" ",R14") и компилятор это нормально переварит. Вот такой вариант у меня почему-то не работает, хотя выглядит логично. #define ADD_STR_DEF(a) #a asm("CMP R10,#" ADD_STR_DEF(BUF_LIMIT)); причём вот так вот компилит как надо: asm("CMP R10,#" ADD_STR_DEF(128)); То есть при использовании # внутри дефайна, параметр не заменяется на предефайненый, а используется как строка. Изменено 4 ноября, 2009 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба #define BUF_LIMIT 128 #define ADD_STR_DEF(a) #a #define ADEF(a) ADD_STR_DEF(a) asm("CMP R10,#" ADEF(BUF_LIMIT)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба А что за компилятор? Для gcc можно написать инлайн асм функцию или макрос с аргументом, в качестве аргумента будет ваше задефайненное значение. Так буде красивее. Вот дока Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба ... Я так и знал, что должен быть вариант!!! :) aaarrr меня чуть было не отговорил от моей идеи. Какой компилятор? - Думаю, что этот вариант будет работать с любым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба Думаю, что этот вариант будет работать с любым.Да. С любым вменяемым. Точности ради - традиционное/общепринятое название этого макроса STRINGFY #define STRINGFY2(x) #x #define STRINGFY(x) STRINGFY2(x) или так #define real_stringfy(x) #x #define stringfy(x) real_stringfy(x) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 (изменено) · Жалоба Да. С любым вменяемым. Точности ради - традиционное/общепринятое название этого макроса STRINGFY Опять?! Все самые прикольные макросы кто-то уже придумал до меня http://trac-hg.assembla.com/roxanne/browser/util.h А вообще, очень интересный случай. Оказывается и от "пустышки" есть польза. Изменено 5 ноября, 2009 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Точности ради - традиционное/общепринятое название этого макроса STRINGFY Удивительно! Я уже много лет использую макросы с другими именами и считал, что они стандартные:) // str macro #define STR(S) #S // STR(blabla) = "blabla" #define XSTR(S) STR(S) // STR(_version) = "v1.0" if _version = "v1.0" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Удивительно! Я уже много лет использую макросы с другими именами и считал, что они стандартные:)Ну у меня тоже есть мания величия, но по чужим исходникам (опять таки - по моему опыту ;) ) stringfy встречается чаще всех остальных вариантов вместе взятых. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба stringfy встречается чаще всех остальных вариантов вместе взятых.Пусть так. Но у меня не лежит душа к таким длинным именам... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Ну у меня тоже есть мания величия, но по чужим исходникам (опять таки - по моему опыту ;) ) stringfy встречается чаще всех остальных вариантов вместе взятых. А применял ли кто-нить этот макрос внутри asm() ? Киньте ссылкой, плиз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба А применял ли кто-нить этот макрос внутри asm() ?В смысле? Real же дал пример. Поясните пожалуйста подробнее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Поясните пожалуйста подробнее... Просто GetSmart очень хочет быть первым хоть в чём-то:-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться