Вопросы по Keil C

Юзаю сабжевый компилятор (uVision2 v2.40, версия компилятора - 7.10) Помогите, пожалуйста, решить вопрос.

Как записывать константы в двоичном виде? (запись вида 0b10001011 не катит).

Reply to
Eugene Zhernovoy
Loading thread data ...

Это же hex, а надо bin, то есть единицы и ноли. ;)

Reply to
Eugene Zhernovoy

Hello Eugene.

Sat May 28 2005 09:59, Eugene Zhernovoy wrote to Kirill Frolov:

EZ> Kirill Frolov wrote: >> 0xNN ? EZ> Это же hex, а надо bin, то есть единицы и ноли. ;)

Есть один чудный макрос, не помню, где я его взял:

//------------------------------------ // binary constants definition macro #define _bitset(bits)\ ((byte)(\ (bits%010)|\ (bits/010%010)<<1|\ (bits/0100%010)<<2|\ (bits/01000%010)<<3|\ (bits/010000%010)<<4|\ (bits/0100000%010)<<5|\ (bits/01000000%010)<<6|\ (bits/010000000%010)<<7))

#define BINARY(bits) _bitset(0##bits) //------------------------------------

Вызывается, например, так:

// COMB_10 10_WGM // || || TCCR1A = BINARY(11000101); // WGM: 0 = normal, 4 = CTC // || || // others - PWM modes // COMA_10 AB_FOC

Dimmy.

Reply to
Dimmy Timchenko

Hello Kirill.

29 May 05 00:40, you wrote to Eugene Zhernovoy:

Я не хакер:

=== Cut === #ifndef __BITDEF_H__ #define __BITDEF_H__ 1

#define _00000000 0 #define _00000001 1 #define _00000010 2 #define _00000011 3 #define _00000100 4 #define _00000101 5 #define _00000110 6 #define _00000111 7 #define _00001000 8 #define _00001001 9 #define _00001010 10 #define _00001011 11 #define _00001100 12 #define _00001101 13 #define _00001110 14 #define _00001111 15 #define _00010000 16 #define _00010001 17 #define _00010010 18 #define _00010011 19 #define _00010100 20 #define _00010101 21 #define _00010110 22 #define _00010111 23 #define _00011000 24 #define _00011001 25 #define _00011010 26 #define _00011011 27 #define _00011100 28 #define _00011101 29 #define _00011110 30 #define _00011111 31 #define _00100000 32 #define _00100001 33 #define _00100010 34 #define _00100011 35 #define _00100100 36 #define _00100101 37 #define _00100110 38 #define _00100111 39 #define _00101000 40 #define _00101001 41 #define _00101010 42 #define _00101011 43 #define _00101100 44 #define _00101101 45 #define _00101110 46 #define _00101111 47 #define _00110000 48 #define _00110001 49 #define _00110010 50 #define _00110011 51 #define _00110100 52 #define _00110101 53 #define _00110110 54 #define _00110111 55 #define _00111000 56 #define _00111001 57 #define _00111010 58 #define _00111011 59 #define _00111100 60 #define _00111101 61 #define _00111110 62 #define _00111111 63 #define _01000000 64 #define _01000001 65 #define _01000010 66 #define _01000011 67 #define _01000100 68 #define _01000101 69 #define _01000110 70 #define _01000111 71 #define _01001000 72 #define _01001001 73 #define _01001010 74 #define _01001011 75 #define _01001100 76 #define _01001101 77 #define _01001110 78 #define _01001111 79 #define _01010000 80 #define _01010001 81 #define _01010010 82 #define _01010011 83 #define _01010100 84 #define _01010101 85 #define _01010110 86 #define _01010111 87 #define _01011000 88 #define _01011001 89 #define _01011010 90 #define _01011011 91 #define _01011100 92 #define _01011101 93 #define _01011110 94 #define _01011111 95 #define _01100000 96 #define _01100001 97 #define _01100010 98 #define _01100011 99 #define _01100100 100 #define _01100101 101 #define _01100110 102 #define _01100111 103 #define _01101000 104 #define _01101001 105 #define _01101010 106 #define _01101011 107 #define _01101100 108 #define _01101101 109 #define _01101110 110 #define _01101111 111 #define _01110000 112 #define _01110001 113 #define _01110010 114 #define _01110011 115 #define _01110100 116 #define _01110101 117 #define _01110110 118 #define _01110111 119 #define _01111000 120 #define _01111001 121 #define _01111010 122 #define _01111011 123 #define _01111100 124 #define _01111101 125 #define _01111110 126 #define _01111111 127 #define _10000000 128 #define _10000001 129 #define _10000010 130 #define _10000011 131 #define _10000100 132 #define _10000101 133 #define _10000110 134 #define _10000111 135 #define _10001000 136 #define _10001001 137 #define _10001010 138 #define _10001011 139 #define _10001100 140 #define _10001101 141 #define _10001110 142 #define _10001111 143 #define _10010000 144 #define _10010001 145 #define _10010010 146 #define _10010011 147 #define _10010100 148 #define _10010101 149 #define _10010110 150 #define _10010111 151 #define _10011000 152 #define _10011001 153 #define _10011010 154 #define _10011011 155 #define _10011100 156 #define _10011101 157 #define _10011110 158 #define _10011111 159 #define _10100000 160 #define _10100001 161 #define _10100010 162 #define _10100011 163 #define _10100100 164 #define _10100101 165 #define _10100110 166 #define _10100111 167 #define _10101000 168 #define _10101001 169 #define _10101010 170 #define _10101011 171 #define _10101100 172 #define _10101101 173 #define _10101110 174 #define _10101111 175 #define _10110000 176 #define _10110001 177 #define _10110010 178 #define _10110011 179 #define _10110100 180 #define _10110101 181 #define _10110110 182 #define _10110111 183 #define _10111000 184 #define _10111001 185 #define _10111010 186 #define _10111011 187 #define _10111100 188 #define _10111101 189 #define _10111110 190 #define _10111111 191 #define _11000000 192 #define _11000001 193 #define _11000010 194 #define _11000011 195 #define _11000100 196 #define _11000101 197 #define _11000110 198 #define _11000111 199 #define _11001000 200 #define _11001001 201 #define _11001010 202 #define _11001011 203 #define _11001100 204 #define _11001101 205 #define _11001110 206 #define _11001111 207 #define _11010000 208 #define _11010001 209 #define _11010010 210 #define _11010011 211 #define _11010100 212 #define _11010101 213 #define _11010110 214 #define _11010111 215 #define _11011000 216 #define _11011001 217 #define _11011010 218 #define _11011011 219 #define _11011100 220 #define _11011101 221 #define _11011110 222 #define _11011111 223 #define _11100000 224 #define _11100001 225 #define _11100010 226 #define _11100011 227 #define _11100100 228 #define _11100101 229 #define _11100110 230 #define _11100111 231 #define _11101000 232 #define _11101001 233 #define _11101010 234 #define _11101011 235 #define _11101100 236 #define _11101101 237 #define _11101110 238 #define _11101111 239 #define _11110000 240 #define _11110001 241 #define _11110010 242 #define _11110011 243 #define _11110100 244 #define _11110101 245 #define _11110110 246 #define _11110111 247 #define _11111000 248 #define _11111001 249 #define _11111010 250 #define _11111011 251 #define _11111100 252 #define _11111101 253 #define _11111110 254 #define _11111111 255

#endif === Cut ===

Alexey

Reply to
Alexey Boyko

Hello Alexey.

31 May 05 17:35, you wrote to Kirill Frolov:

AB> Я не хакер:

AB> #ifndef __BITDEF_H__ AB> #define __BITDEF_H__ 1

AB> #define _00000000 0 AB> #define _00000001 1 AB> #define _00000010 2 AB> #define _00000011 3

[...]

AB> #define _11111110 254 AB> #define _11111111 255

А до 1048576 слабо ? :)

Dmitry

Reply to
Dmitry Lyokhin

Hello Alexey.

31 May 05 17:35, you wrote to Kirill Frolov:

AB> === Cut === AB> #ifndef __BITDEF_H__ AB> #define __BITDEF_H__ 1

AB> #define _00000000 0 [skip] AB> #define _11111111 255

AB> #endif AB> === Cut === Ууу... А если 32 битные? :) По пpикидкам заголовочник будет поpядка 200 гигов pазмеpом :) По-моему 16-pичные или 8-pичные (кто как пpивык) числа хоpошо pаскладываюся в уме на единички и нолики, к тому же меньше веpоятности допустить опечатку. К тому же лучше использовать мнемонические обозначения бит (и их комбинации по "или", "и" и "не"), если они несут какой-то смысл в конкpетном контексте, легче читать будет и еще меньше веpоятность опечатки. #define BIT_NULL 0x1 #define BIT_ONE 0x2 /* */ = BIT_NULL | BIT_ONE

Sergey

Reply to
Sergey Davydov

Hello Sergey.

01 Jun 05 11:40, you wrote to me:

AB>> #endif AB>> === Cut === SD> Ууу... А если 32 битные? :) По пpикидкам заголовочник будет поpядка SD> 200 гигов pазмеpом :)

Hу - не получается 32-х битные так. И 16-и битные тоже.

SD> По-моему 16-pичные или 8-pичные (кто как пpивык) SD> числа хоpошо pаскладываюся в уме на единички и нолики,

Да. Hо для записи в битовые регистры периферии эти макросы очень подходят.

SD> к тому же меньше веpоятности допустить опечатку.

Да ну?

SD> К тому же лучше использовать SD> мнемонические обозначения бит (и их комбинации по "или", "и" и "не"), SD> если они несут какой-то смысл в конкpетном контексте, легче читать SD> будет и еще меньше веpоятность опечатки. SD> #define BIT_NULL 0x1 #define SD> BIT_ONE 0x2 /* */ = BIT_NULL | BIT_ONE

В хидерах avr-libc есть макрос: #define BV(bit) (1<<(bit)) Тоже очень помогает. Я уже привык:

TIMSK = BV(TOIE0) | BV(TICIE1);

Alexey

Reply to
Alexey Boyko

Alexey, ты ещё здесь сидишь?

Вторник Май 31 2005 16:35, Alexey Boyko wrote to Kirill Frolov:

С 16-ти битными битовыми данными что делать собираешься? А с 32-х битными?

Георгий

Reply to
George Shepelev

Hello Sergey.

Wed Jun 01 2005 12:40, Sergey Davydov wrote to Alexey Boyko:

AB>> === Cut === AB>> #ifndef __BITDEF_H__ AB>> #define __BITDEF_H__ 1

AB>> #define _00000000 0 SD> [skip] AB>> #define _11111111 255

AB>> #endif AB>> === Cut === SD> Ууу... А если 32 битные? :) По пpикидкам заголовочник будет поpядка 200 SD> гигов pазмеpом :)

Чего, потерялось моё письмо? Я ж кидал сюда чудную макру на эту тему, сейчас ещё раз кину.

Кстати, в Аде можно использовать числа по любой базе от 16 до 2. :) Пишешь #2#100101, и всё.

//------------------------------------ // binary constants definition macro #define _bitset(bits)\ ((byte)(\ (bits%010)|\ (bits/010%010)<<1|\ (bits/0100%010)<<2|\ (bits/01000%010)<<3|\ (bits/010000%010)<<4|\ (bits/0100000%010)<<5|\ (bits/01000000%010)<<6|\ (bits/010000000%010)<<7))

#define BINARY(bits) _bitset(0##bits) //------------------------------------

Использование:

SFR = BINARY(01101000);

Dimmy.

Reply to
Dimmy Timchenko

Tue, 31 May 2005 18:50:42 +0400 Dmitry Lyokhin wrote to Alexey Boyko:

AB>> Я не хакер:

AB>> #ifndef __BITDEF_H__ AB>> #define __BITDEF_H__ 1

AB>> #define _00000000 0 AB>> #define _00000001 1 AB>> #define _00000010 2 AB>> #define _00000011 3

DL> [...]

AB>> #define _11111110 254 AB>> #define _11111111 255

DL> А до 1048576 слабо ? :)

Дык не руками же. :) Тока файла здаровая палучиццо. :))

Reply to
Harry Zhurov

Hello George.

01 Jun 05 22:45, you wrote to me:

KF>>> Ты хакер или где? AB>> Я не хакер: AB>> === Cut === AB>> #ifndef __BITDEF_H__ AB>> #define __BITDEF_H__ 1 AB>> #define _00000000 0 GS> С 16-ти битными битовыми данными что делать собираешься? А с 32-х GS> битными?

Я же сразу предупредил - я не хакер. Hичего я с ними не собираюсь делать.

Кстати, в одной из сборок WinAvr gcc был пропатчен на предмет 0b10100010

Alexey

Reply to
Alexey Boyko

Hi Sergey !

Совсем недавно 01 Jun 05 12:40, Sergey Davydov писал к Alexey Boyko:

AB>> #define _00000000 0 SD> [skip] AB>> #define _11111111 255

AB>> #endif AB>> === Cut === SD> Ууу... А если 32 битные? :) Так Тимченко же тут приводил более пристойную форму- по одной строке на каждое бинарное знакоместо. SD> По-моему 16-pичные или 8-pичные (кто как пpивык) SD> числа хоpошо pаскладываюся в уме на единички и нолики, к тому же SD> меньше веpоятности допустить опечатку. Хакер, хакер! :) SD> К тому же лучше использовать мнемонические обозначения бит (и их SD> комбинации по "или", "и" и "не"), SD> если они несут какой-то смысл в конкpетном контексте, легче читать SD> будет и еще меньше веpоятность опечатки. Это да. Учитывая, что во многих эхотажных компиляторах (я так вообще других не помню) эти имена для битов уже прописаны в хедере камня.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Hello Ruslan.

03 Jun 05 08:01, you wrote to me:

AB>>> #define _00000000 0 SD>> [skip] AB>>> #define _11111111 255 AB>>> === Cut === SD>> Ууу... А если 32 битные? :) RM> Так Тимченко же тут пpиводил более пpистойную фоpму- по одной стpоке RM> на каждое бинаpное знакоместо. Видел. Так пpотив такой фоpмы я ничего и не имею. Мне не понpавилась идея пеpечисления всех чисел от 0 до (2^n - 1). SD>> По-моему 16-pичные или 8-pичные (кто как пpивык) SD>> числа хоpошо pаскладываюся в уме на единички и нолики, к тому же SD>> меньше веpоятности допустить опечатку. RM> Хакеp, хакеp! RM> :) Hу уж если 16-pичная запись уже хакеpством считается... :) SD>> К тому же лучше использовать мнемонические обозначения бит (и их SD>> комбинации по "или", "и" и "не"), SD>> если они несут какой-то смысл в конкpетном контексте, легче SD>> читать будет и еще меньше веpоятность опечатки. RM> Это да. Учитывая, что во многих эхотажных компилятоpах (я так вообще RM> дpугих не помню) эти имена для битов уже пpописаны в хедеpе камня. Бывают еще собственные имена битов, напpимеp ножки обозвать более говоpящими именами (в pамках пpоекта), чем, скажем, P1.0

Sergey

Reply to
Sergey Davydov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.