MPLAB C18 EEPROM initialization

Loading thread data ...

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

formatting link

Reply to
Dmitry Orlov

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

formatting link

Reply to
Dmitry Orlov
Reply to
Dimmy Timchenko
Reply to
Dimmy Timchenko
Reply to
Nickita A Startcev
Reply to
Alexander Torres
Reply to
Nickita A Startcev

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;

Reply to
Kirill Frolov

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 вполне наглядна. Кому не наглядна -- пусть займутся чем-нибудь другим в жизни...

Reply to
Kirill Frolov

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) где-либо ещё.

Reply to
Kirill Frolov

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ИЕ и неверное значение (отрицательное).

Reply to
Kirill Frolov

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

formatting link

Reply to
Dmitry Orlov

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

formatting link

Reply to
Dmitry Orlov

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.