Вопросы по С/С++ (СИ)
Доброго вечера, есть плата и проект и старая программа-отладчик. Хотелось бы получать нужные дзначения для другой проги.. Проект TMS 2810
- Реклама
Можно ли как-то в Кейле компилятору сказать, чтобы отзеркаливал константные байты? Например, вместо 0xA8 получить в коде 0x15?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Gudd-Head",url="/forum/viewtopic.php?p=3815141#p3815141"]Например, вместо 0xA8 получить в коде 0x15?[/uquote]Можно макрос написать или constexpr функцию. На iar можно rbit использовать, а вот на gcc нет. Можно ли на keil не знаю. Так что, луше стандартными средствами языка.
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3815154#p3815154"]На iar можно rbit использовать, а вот на gcc нет.[/uquote]
На всех можно. А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.
На всех можно. А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3815196#p3815196"]На всех можно.[/uquote]gcc не умеет rbit в компайлтайме выполнять.
[uquote="a5021",url="/forum/viewtopic.php?p=3815196#p3815196"]А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.[/uquote]Речь не о рантайме.
[uquote="a5021",url="/forum/viewtopic.php?p=3815196#p3815196"]А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.[/uquote]Речь не о рантайме.
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Код: Выделить всё
constexpr uint8_t rbit8(uint8_t x)
{
return (x & 0x01 ? 0x80 : 0) |
(x & 0x02 ? 0x40 : 0) |
(x & 0x04 ? 0x20 : 0) |
(x & 0x08 ? 0x10 : 0) |
(x & 0x10 ? 0x08 : 0) |
(x & 0x20 ? 0x04 : 0) |
(x & 0x40 ? 0x02 : 0) |
(x & 0x80 ? 0x01 : 0);
}
const uint8_t tmp = rbit8(0xA8);
int main()
{
GPIOA->IDR = tmp;
}Код: Выделить всё
//GPIOA->IDR = tmp;
LDR.N R1,??main_0 ;; 0x48000010
MOVS R0,#+21
STR R0,[R1, #+0]
Последний раз редактировалось VladislavS Пт мар 20, 2020 10:29:23, всего редактировалось 1 раз.
насколько я понимаю, и макросом это можно задефайнить с тем же эффектом
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
[uquote="ARV",url="/forum/viewtopic.php?p=3815358#p3815358"]насколько я понимаю, и макросом это можно задефайнить с тем же эффектом[/uquote]
Почти 256 значений (за вычетом симметричных)?
Идея в том, чтобы писать в коде что-то осмысленное видаи потом выплёвывать в последовательный передатчик, но проблема в том, что выдавать надо старшим битом вперёд, а передатчик умеет только младшим.
Почти 256 значений (за вычетом симметричных)?
Идея в том, чтобы писать в коде что-то осмысленное вида
Код: Выделить всё
tmp = (3<<A)|(4<<B)|(5<<C)[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Gudd-Head, Определись, тебе нужно константы этапа компиляции или на рантайме вычислять? Первое я написал как. Макросом будет точно так же, но хужее.
Если у тебя кортекс, судя по IDE Кеил, то у него есть команда RBIT. На рантайме всё очень просто будетВ принципе, Keil и IAR это и в компайлтайме могут вычислить.
Если у тебя кортекс, судя по IDE Кеил, то у него есть команда RBIT. На рантайме всё очень просто будет
Код: Выделить всё
uint8_t tmp = _RBIT(/*любое_выражение*/)>>24;[uquote="VladislavS",url="/forum/viewtopic.php?p=3815966#p3815966"]Макросом будет точно так же, но хужее.[/uquote]
Почему? Или чем хужее?
Почему? Или чем хужее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
[uquote="VladislavS",url="/forum/viewtopic.php?p=3815966#p3815966"]Определись, тебе нужно константы этапа компиляции или на рантайме вычислять?[/uquote]
При компиляции. И там далеко не кортекс.
Значит, использовать constexpr?
При компиляции. И там далеко не кортекс.
Значит, использовать constexpr?
Спойлер
Код: Выделить всё
constexpr uint8_t rbit8(uint8_t x)
{
return (x & 0x01 ? 0x80 : 0) |
(x & 0x02 ? 0x40 : 0) |
(x & 0x04 ? 0x20 : 0) |
(x & 0x08 ? 0x10 : 0) |
(x & 0x10 ? 0x08 : 0) |
(x & 0x20 ? 0x04 : 0) |
(x & 0x40 ? 0x02 : 0) |
(x & 0x80 ? 0x01 : 0);}[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
arkhnchul писал(а):constexpr-ы обычно лаконичнее и понятнее развесистых макросов
Код: Выделить всё
#define bitrev(x) (((x) & 0x01 ? 0x80 : 0) | \
((x) & 0x02 ? 0x40 : 0) | \
((x) & 0x04 ? 0x20 : 0) | \
((x) & 0x08 ? 0x10 : 0) | \
((x) & 0x10 ? 0x08 : 0) | \
((x) & 0x20 ? 0x04 : 0) | \
((x) & 0x40 ? 0x02 : 0) | \
((x) & 0x80 ? 0x01 : 0))если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
В коде писать ?
Код: Выделить всё
tmp = bitrev((3<<A)|(4<<B)|(5<<C))[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=3816167#p3816167"]по-моему, и лаконичность, и понятность не пострадала в данном случае[/uquote]Да причём тут лаконичность? Мне на неё положить - один раз написал и забыл. Подумай, какой код даст твой макрос на вот таком простом коде
Код: Выделить всё
*(volatile uint8_t *)&SPI1->DR = bitrev(SPI1->DR);А че тут думать, если вы приводите пример run-time, а речь шла о вычислениях compile-time? То есть выражение-параметр макроса у вас не константа?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
А кто-то этого не знал? Речь шла о том, как реверсировать константы, для этого функция не обязательна. Тем более что увеличивает объём кода.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=3816542#p3816542"]А кто-то этого не знал?[/uquote]Получается, что нет. Иначе зачем спрашивать было?
[uquote="ARV",url="/forum/viewtopic.php?p=3815975#p3815975"]Почему? Или чем хужее?[/uquote]
[uquote="ARV",url="/forum/viewtopic.php?p=3816542#p3816542"]Речь шла о том, как реверсировать константы, для этого функция не обязательна.[/uquote]Я это в первом же ответе написал. Что можно макросом или функцией.
[uquote="ARV",url="/forum/viewtopic.php?p=3815975#p3815975"]Тем более что увеличивает объём кода.[/uquote]Функция как раз таки уменьшает размер кода.
PS: Это, кстати, было не единственное слабое место макроса.
[uquote="ARV",url="/forum/viewtopic.php?p=3815975#p3815975"]Почему? Или чем хужее?[/uquote]
[uquote="ARV",url="/forum/viewtopic.php?p=3816542#p3816542"]Речь шла о том, как реверсировать константы, для этого функция не обязательна.[/uquote]Я это в первом же ответе написал. Что можно макросом или функцией.
[uquote="ARV",url="/forum/viewtopic.php?p=3815975#p3815975"]Тем более что увеличивает объём кода.[/uquote]Функция как раз таки уменьшает размер кода.
PS: Это, кстати, было не единственное слабое место макроса.
так я и спрашиваю о слабостях.VladislavS писал(а):Это, кстати, было не единственное слабое место макроса
в контексте вопроса о константных вычислениях функция проигрывает полностью по размеру кода, т.к. макрос вообще не порождает код, а функция - порождает.
а в чем еще слабость макроса в упомянутом контектсе?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


