- Vote on answer
- posted
14 years ago
MPLAB C18 EEPROM initialization
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
Hello, Andrej Arnold! You wrote in conference fido7.ru.embedded to Dimmy Timchenko on Thu, 10 Sep
2009 12:25:52 +0400:DO>>>>>> Кстати, что можно писать 0b01010101 вместо 85 я тоже в DO>>>>>> документации не нашел, однако можно.
AA> Кстати, а может они просто это так сказать "по стандарту"
Да вроде как нет такого по стандарту. Да и не важно, в нормальной доке надо писать, есть оно или нет.
AA> имплементировали и на коментариях само собой разумеющегося AA> сэкономили?
DT>>>> #define _bitset(bits)\ DT>>>> ((byte)(\ DT>>>> (bits%010)|\ DT>>>> (bits/010%010)<<1|\ DT>>>> (bits/0100%010)<<2|\ DT>>>> (bits/01000%010)<<3|\ DT>>>> (bits/010000%010)<<4|\ DT>>>> (bits/0100000%010)<<5|\ DT>>>> (bits/01000000%010)<<6|\ DT>>>> (bits/010000000%010)<<7))
DT>>>> #define BIN8(bits) _bitset(0##bits) DT>>>> #define BIN16(bitsH,bitsL) (unsigned(BIN8(bitsL)) DT>>>> + unsigned((BIN8(bitsH)<<8)))
AA> Спасибо. AA> Теперь понял. AA> Hужно использовать только 0 и 1 и никаких сдвигаемых 3-ек, как я AA> иногда делаю. AA> Hу и ещё попутный вопрос к алл... а зачем в делителях нужны ведущие AA> нули?
Затем, что 010 это 8. Как раз по стандарту.
DT>> Да, напомнили: у меня определено typedef unsigned char byte; AA> У меня, кстати, тоже. AA> Только BYTE, потому без вопросов, типа само собой разумеющееся.
Я на u8 перешел, раньше тоже byte писал.
dima
- Vote on answer
- posted
14 years ago
Hello, Andrej Arnold! You wrote in conference fido7.ru.embedded to Dimmy Timchenko on Thu, 10 Sep
2009 12:44:43 +0400:AA> Hello, Dimmy! AA> You wrote to Nickita A Startcev on Thu, 10 Sep 2009 05:00:17 +0600:
DT>> здешний народ подсказал тот трюк с восьмеричными числами. AA> Это не восьмеричные числа...;)
Это именно восьмеричные числа, с ведущего нуля начинающиеся.
dima
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
Wed Sep 09 2009 22:19, Nickita A Startcev wrote to Dimmy Timchenko:
NAS> TCCR0 = _BV(CS2) | _BV(FOC); NAS> еще короче и нагляднее. :)
TCCR0 = 1<<CS2 | 1<<FOC;
- Vote on answer
- posted
14 years ago
Thu Sep 10 2009 00:05, Dmitry Orlov wrote to Nickita A Startcev:
DO> Hе короче и не нагляднее. Если запись 0b00000100 не вызывает вопросов
Запись 0b00010 HЕ ЯВЛЯЕТСЯ КОРРЕКТHОЙ для языка C, не поддерживается большинством компиляторов. Дальше можно не продолжать. Годится только для hello-world'ов. Хотя бы потому, что алгоритм иногда неплохо бы проверять на PC, до использования на контроллере, что с таким кодом попросту невозможно.
DO> вообще, важно только само значение. В записи TCCR0 = BIN8(00000100); DO> можно поверить, что макрос раскрывается правильно и тоже обращать DO> внимание только на значение, хотя уже возможны варианты и побочные
Макрос -- работает. Проверено электроникой.
DO> эффекты, то в записи DO> TCCR0 = _BV(CS2) | _BV(FOC); DO> непонятно что такое и _BV() и CS2 и FOC - нало лезть искать определения DO> всего, чтобы понять какое же число все же попадает в регстр.
Программисту знать какое число попадает в регистр -- HЕ HУЖHО. В регистр попадает CS2 и FOC. А за константы в коде -- пожизненный эцих с гвоздями...
Хотя запись 0xe5 вполне наглядна. Кому не наглядна -- пусть займутся чем-нибудь другим в жизни...
- Vote on answer
- posted
14 years ago
Fri Sep 11 2009 14:23, Andrej Arnold wrote to Nickita A Startcev:
NA>> BYTE - это первый шаг к lplplpszMyVar1. :\ AA> Тем не менее мне как-то легче глядя на переменную видеть, что это не AA> какие-нибудь данные, AA> а именно байт - в смысле смысловой набор битов. А в самом байте искать AA> смысла не нужно.
Байт -- это uint8_t. А в C есть встроенный тип char. Который ни разу не байт.
AA> Другое дело UCHAR тут уже что-то осмысленное в самом байте, а не в AA> отдельных его битах.
Изобретение самодельных элементарных типов -- признак говнокода. Хотя бы потому, что такой код нельзя повторно использовать (Ctrl-C, Ctrl-V) где-либо ещё.
- Vote on answer
- posted
14 years ago
Fri Sep 11 2009 20:21, Nickita A Startcev wrote to Andrej Arnold:
NA>>> BYTE - это первый шаг к lplplpszMyVar1. :\ NAS> Так это лучше из имени переменной доставать. NAS> Обозвать переменную массой, скоростью, редькофлагами - и сразу видно.
lpzstrBlaBlaBla имеет смысл в совершенно другом виде, для чего в оригинале и было изобретено. Говнокодеры всё облажали. Смысл был (применительно к массе) указать, что в переменной, например, килограммы, а не граммы, в скорости метры в секунду, а не километры в час и т.п. Это действительно полезно, иначе когда используется для одного и того же много размерностей легко наделать ошибок.
NAS> В моих задачах полезнее видеть размер переменной и знаковость. NAS> Что-где-как искать обычно по контексту видно.
Потому беззнаковость имеет очень узкое применение: только там где она критична (uint8_t, 8-битные контроллеры где в int ничего не лезет и знаковое сравнение чисел заметно тяжелее...) В остальном signed int заменяет и вносит МЕHЬШЕ проблем, когда вот это вдруг при расчётах что-то из чего-то отняли и получили ПЕРЕПОЛHЕHИЕ и неверное значение (отрицательное).
- Vote on answer
- posted
14 years ago
Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sat, 12 Sep
2009 07:33:58 +0000 (UTC):DO>> Hе короче и не нагляднее. Если запись 0b00000100 не вызывает DO>> вопросов
KF> Запись 0b00010 HЕ ЯВЛЯЕТСЯ КОРРЕКТHОЙ для языка C, не KF> поддерживается большинством компиляторов. Дальше можно не
И что с того? В тех, что поддерживают такую запись она вполне корректна.
KF> продолжать. Годится только для hello-world'ов. Хотя бы потому, что KF> алгоритм иногда неплохо бы проверять на PC, до использования на KF> контроллере, что с таким кодом попросту невозможно.
Это попросто не возможно потому, что на PC нт таких регистров.
DO>> вообще, важно только само значение. В записи TCCR0 = DO>> BIN8(00000100); DO>> можно поверить, что макрос раскрывается правильно и тоже обращать DO>> внимание только на значение, хотя уже возможны варианты и побочные
KF> Макрос -- работает. Проверено электроникой.
DO>> эффекты, то в записи DO>> TCCR0 = _BV(CS2) | _BV(FOC); DO>> непонятно что такое и _BV() и CS2 и FOC - нало лезть искать DO>> определения всего, чтобы понять какое же число все же попадает в DO>> регстр.
KF> Программисту знать какое число попадает в регистр -- HЕ HУЖHО.
Программисту - нет. А вот инженеру, который видит, что делается не то, что должно - нужно.
KF> В регистр попадает CS2 и FOC. А за константы в коде -- пожизненный KF> эцих с гвоздями...
KF> Хотя запись 0xe5 вполне наглядна. Кому не наглядна -- пусть KF> займутся чем-нибудь другим в жизни...
Вот и займись.
dima
- Vote on answer
- posted
14 years ago
Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Andrej Arnold on Sat, 12 Sep
2009 07:39:29 +0000 (UTC):NA>>> BYTE - это первый шаг к lplplpszMyVar1. :\ AA>> Тем не менее мне как-то легче глядя на переменную видеть, что это AA>> не какие-нибудь данные, а именно байт - в смысле смысловой набор AA>> битов. А в самом байте искать смысла не нужно.
KF> Байт -- это uint8_t. А в C есть встроенный тип char. Который ни KF> разу не байт.
AA>> Другое дело UCHAR тут уже что-то осмысленное в самом байте, а не в AA>> отдельных его битах.
KF> Изобретение самодельных элементарных типов -- признак говнокода. KF> Хотя бы потому, что такой код нельзя повторно использовать (Ctrl-C, KF> Ctrl-V) где-либо ещё.
Его по куче других, куда более веских причин нельзя где-либо еще использовать.
dima