MPLAB C18 EEPROM initialization

Sep 02, 2009 358 Replies

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Nickita A Startcev on Sat, 12 Sep 2009 07:45:01 +0000 (UTC):

KF> Потому беззнаковость имеет очень узкое применение: только там где KF> она критична (uint8_t, 8-битные контроллеры где в int ничего не KF> лезет и знаковое сравнение чисел заметно тяжелее...) В остальном KF> signed int заменяет и вносит KF> МЕHЬШЕ проблем, когда вот это вдруг при расчётах что-то из чего-то KF> отняли и получили ПЕРЕПОЛHЕHИЕ и неверное значение (отрицательное).

Ты такой умный, а посмотреть сколькибитный контроллер PIC18 не умеешь. Он как раз восьмибитный. Впрочем, восьмибитные регистры не редкость и у 16 и у

32хбитных контроллеров.

dima

formatting link

ðÒÉ×ÅÔ, Kirill !

12 Sep 09 , 11:27 Kirill Frolov ÐÉÓÁÌ Ë Nickita A Startcev:

NAS>> TCCR0 = _BV(CS2) | _BV(FOC); NAS>> ÅÝÅ ËÏÒÏÞÅ É ÎÁÇÌÑÄÎÅÅ. :)

KF> TCCR0 = 1<<CS2 | 1<<FOC;

"<<" × ÇÌÁÚÁÈ ÒÑÂÉÔ. HÏ ÜÔÏ ÕÖÅ ÍÏÉ ÌÉÞÎÙÅ ÚÁÍÏÒÏÞËÉ.

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ÐÏޣÍ ×Ù ÂÒÅÄÉÔÅ?

ðÒÉ×ÅÔ, Kirill !

12 Sep 09 , 11:45 Kirill Frolov ÐÉÓÁÌ Ë Nickita A Startcev:

KF> lpzstrBlaBlaBla ÉÍÅÅÔ ÓÍÙÓÌ × ÓÏ×ÅÒÛÅÎÎÏ ÄÒÕÇÏÍ ×ÉÄÅ, ÄÌÑ ÞÅÇÏ × KF> ÏÒÉÇÉÎÁÌÅ É ÂÙÌÏ ÉÚÏÂÒÅÔÅÎÏ. çÏ×ÎÏËÏÄÅÒÙ ×ӣ ÏÂÌÁÖÁÌÉ. óÍÙÓÌ ÂÙÌ KF> (ÐÒÉÍÅÎÉÔÅÌØÎÏ Ë ÍÁÓÓÅ) ÕËÁÚÁÔØ, ÞÔÏ × ÐÅÒÅÍÅÎÎÏÊ, ÎÁÐÒÉÍÅÒ, KF> ËÉÌÏÇÒÁÍÍÙ, Á ÎÅ ÇÒÁÍÍÙ, × ÓËÏÒÏÓÔÉ ÍÅÔÒÙ × ÓÅËÕÎÄÕ, Á ÎÅ ËÉÌÏÍÅÔÒÙ × KF> ÞÁÓ É Ô.Ð. üÔÏ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÐÏÌÅÚÎÏ, ÉÎÁÞÅ ËÏÇÄÁ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ KF> ÏÄÎÏÇÏ É ÔÏÇÏ ÖÅ ÍÎÏÇÏ ÒÁÚÍÅÒÎÏÓÔÅÊ ÌÅÇËÏ ÎÁÄÅÌÁÔØ ÏÛÉÂÏË.

ðÏÌÅÚÎÏ, ÎÏ Ñ ÔÁËÏÇÏ ÎÉ ÒÁÚÕ ÎÅ ×ÉÄÅÌ. ëÓÔÁÔÉ, ÉÎÔÅÒÅÓÎÏ ÂÙÌÏ ÂÙ ÐÏÓÍÏÔÒÅÔØ ÎÁ ÑÚÙË/ËÏÍÐÉÌÑÔÏÒ/ÌÉÂÕ, ËÏÔÏÒÙÅ ÂÙ ÂÉÌÉ ÐÏ ÂÁÛËÅ ÚÁ ÐÏÐÙÔËÕ ÓËÌÁÄÙ×ÁÎÉÑ ÇÒÁÍÍÏ× Ó ËÉÌÏÇÒÁÍÍÁÍÉ.

NAS>> ÷ ÍÏÉÈ ÚÁÄÁÞÁÈ ÐÏÌÅÚÎÅÅ ×ÉÄÅÔØ ÒÁÚÍÅÒ ÐÅÒÅÍÅÎÎÏÊ É ÚÎÁËÏ×ÏÓÔØ. NAS>> þÔÏ-ÇÄÅ-ËÁË ÉÓËÁÔØ ÏÂÙÞÎÏ ÐÏ ËÏÎÔÅËÓÔÕ ×ÉÄÎÏ.

KF> ðÏÔÏÍÕ ÂÅÚÚÎÁËÏ×ÏÓÔØ ÉÍÅÅÔ ÏÞÅÎØ ÕÚËÏÅ ÐÒÉÍÅÎÅÎÉÅ: ÔÏÌØËÏ ÔÁÍ ÇÄÅ KF> ÏÎÁ ËÒÉÔÉÞÎÁ (uint8_t, 8-ÂÉÔÎÙÅ ËÏÎÔÒÏÌÌÅÒÙ ÇÄÅ × int ÎÉÞÅÇÏ ÎÅ ÌÅÚÅÔ KF> É ÚÎÁËÏ×ÏÅ ÓÒÁ×ÎÅÎÉÅ ÞÉÓÅÌ ÚÁÍÅÔÎÏ ÔÑÖÅÌÅÅ...)

ÌÉÂÏ ÖÅÓÔËÉÊ ÒÅÁÌÔÁÊÍ, ÇÄÅ ÍÙ ÞÕÔÏË ÜËÏÎÏÍÉÍ, ÕÒÅÚÁ× ÒÁÚÒÑÄÎÏÓÔØ.

KF> ÷ ÏÓÔÁÌØÎÏÍ signed int KF> ÚÁÍÅÎÑÅÔ É ×ÎÏÓÉÔ íåHøûå ÐÒÏÂÌÅÍ, ËÏÇÄÁ ×ÏÔ ÜÔÏ ×ÄÒÕÇ ÐÒÉ ÒÁÓޣÔÁÈ KF> ÞÔÏ-ÔÏ ÉÚ ÞÅÇÏ-ÔÏ ÏÔÎÑÌÉ É ÐÏÌÕÞÉÌÉ ðåòåðïìHåHéå É ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ KF> (ÏÔÒÉÃÁÔÅÌØÎÏÅ).

á Ó ÐÅÒÅÐÏÌÎÅÎÉÅÍ × ÓÑÈ ×ÏÏÂÝÅ ×ӣ ÐÌÏÈÏ É ÌÅÞÉÔÓÑ ÐÏÞÔÉ ÔÏÌØËÏ ÒÁÓÛÉÒÅÎÉÅÍ ÒÁÚÒÑÄÎÏÓÔÉ ÄÏ ÉÚÂÙÔÏÞÎÏÊ. ÎÕ, ÉÌÉ, ÐÏÒÎÏÇÒÁÆÉÅÊ ÔÉÐÁ if((a+b)<b) { perror("ÐÅÒÅÐÏÌÎÉÌÉÓØ ÐÒÉ ÓÌÏÖÅÎÉÉ Á É Â"); }

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ÓÆÅÒÁ û×ÁÒÃÛÉÌØÄÁ-äÁÊÓÏÎÁ

ðÒÉ×ÅÔ, Andrey !

12 Sep 09 , 11:02 Andrey Arnold ÐÉÓÁÌ Ë Nickita A Startcev:

AA> ÷ÓÑ ÐÒÏÂÌÅÍÁ × ÔÏÍ, ÞÔÏ ÔÏ, ÞÔÏ ÄÌÑ ÏÄÎÏÇÏ ÌÕÞÛÅ, ÄÌÑ ÄÒÕÇÏÇÏ ÆÉÇÎÑ, AA> ÎÅ ÓÔÏÑÝÁÑ ×ÒÅÍÅÎÉ ÎÁ ÐÒÏÞÔÅÎÉÅ...

õÇÕ. ðÏÜÔÏÍÕ, ÏÂÙÞÎÏ, ÅÓÌÉ × ËÏÌÌÅËÔÉ×Å ÂÏÌØÛÅ Ä×ÕÈ ÐÒÏÇÒÁÍÍÉÓÔÏ×, ÔÏ ÓÔÁÒÁÀÔÓÑ ÐÒÉÎÑÔØ ÏÂÝÉÅ ÓÏÇÌÁÛÅÎÉÑ Ï ÉÍÅÎÏ×ÁÎÉÉ ×ÓÅÇÏ ÐÏÄÒÑÄ É Ï ÔÉÐÁÈ.

AA> äÁ É ×ÏÏÂÝÅ ÅÍÕ ÕÄÏÂÎÅÅ ÐÏÞÔÉ ÌÀÂÕÀ ÐÒÏÇÒÁÍÍÕ ÏÂÉÌØÎÏ AA> ÕÄÏÂÒÑÔØ callback-ÁÍÉ, × "ÆÉÌÏÓÏÆÉÀ ÍÙÛÌÅÎÉÑ" ËÏÔÏÒÙÍÉ AA> Ñ ×ÏÏÂÝŠΊרÅÄÕ,

þÕÖÁÑ ÄÕÛÁ - ÐÏԣÍËÉ. á Ñ ÌÀÂÌÀ ÒÅËÕÒÓÉÀ É ËÕÞÉ ÍÅÌËÉÈ ÆÕÎËÃÉÊ. á ÎÅËÏÔÏÒÙÅ ÌÀÂÑÔ ÈÒÁÎÉÔØ ÂÏÌØÛÉÅ ËÕÓËÉ ÄÁÎÎÙÈ..

AA> ÈÏÔÑ, ×ÒÏÄÅ, É ÐÏÎÉÍÁÀ ÎÅÍÎÏÖËÏ ÄÁÖÅ, ÞÔÏ ÔÁËÏÅ AA> ÆÕÎËÃÉÑ ÎÁÄ ÆÕÎËÃÉÅÊ (ÎÅ ÐÕÔÁÔØ Ó ÆÕËÎÃÉÅÊ ÏÄÎÉÍ ÉÚ ÐÁÒÁÍÅÔÒÏ× AA> ËÏÔÏÒÏÊ ÍÏÖÅÔ ÂÙÔØ ÄÒÕÇÁÑ ÆÕÎËÃÉÑ - ÞÔÏ É ÜËÓÐÌÕÁÔÉÒÕÅÔ callback), AA> ÅÓÌÉ ÉÍÅÔØ ××ÉÄÕ ðáÌ (ðÏÚÉÃÉÏÎÎÕÀ áÌÇÅÂÒÕ ìÏÇÉËÉ).

üÔÉÍ ÐÏÌØÚÏ×ÁÔØÓÑ ÎÁÄÏ, ÔÏÇÄÁ ÂÕÄÅÛØ ÏÐÏÊ ÞÕÑÔØ, ÞÔÏ-ÇÄÅ-ËÁË-ÚÁÞÅÍ É ÉÚ ËÁËÉÈ ÓÏÏÂÒÁÖÅÎÉÊ.

AA> üÔÏ ÓËÁÚÁÎÏ ÂÅÚÏÔÎÏÓÉÔÅÌØÎÏ Ë ÔÏÍÕ, ÞÔÏ Ñ É ÓÁÍ ÐÏÌØÚÕÀÓØ ÔÅÍÉ AA> ÖÅ u16, É ×Ï×ÓÅ ÎÅ ÐÏÔÏÍÕ, ÞÔÏ ËÏÍÕ-ÔÏ × ÔÁËÏÍ ÓÌÕÞÁÅ, AA> ÞÔÏ-ÔÏ "×ÉÄÎÏ ÓÒÁÚÕ", Á ÐÏÔÏÍÕ, ÞÔÏ ÚÁÐÉÓØ ÐÏÌÕÞÁÅÔÓÑ ËÏÒÏÞÅ.

úÁÐÉÓØ ËÏÒÏÞÅ, ÂÏÌØÛÅ ÍÏÖÎÏ ÏÈ×ÁÔÉÔØ ÏÄÎÉÍ ×ÚÇÌÑÄÏÍ.

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ëÁ(ÎÉ)ÂÁÌÌÉÓÔÉÞÅÓËÉÅ ÒÕÎÙ

ðÒÉ×ÅÔ, Nickita A Startcev!

12.09.2009 13:54 ÷Ù ÐÉÓÁÌÉ:

ðÏÓÍÏÔÒÉ ÎÁÐÒÉÍÅÒ ÎÁ ÑÚÙË C++ É ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ËÏÍÐÉÌÑÔÏÒ ÉÚ GCC. ÷ C++ ÐÒÏÇÒÁÍÍÉÓÔ ÓÁÍ ÓÏÚÄÁÅÔ ËÌÁÓÓÙ É ÏÐÒÅÄÅÌÑÅÔ ÄÏÐÕÓÔÉÍÙÅ ÏÐÅÒÁÃÉÉ Ó ÎÉÍÉ. èÏÞÅÛØ - ÏÐÒÅÄÅÌÉ ÏÐÅÒÁÃÉÀ ÓÌÏÖÅÎÉÑ ÇÒÁÍÍÏ× Ó ËÉÌÏÇÒÁÍÍÁÍÉ (ÉÌÉ ÆÕÎÔÁÍÉ, ËÁÒÁÔÁÍÉ, ÓÌÏÎÁÍÉ), ËÏÔÏÒÁÑ ÂÕÄÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÅÌÁÔØ ÎÅÏÂÈÏÄÉÍÙÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ. HÅ ÈÏÞÅÛØ - ÎÅ ÏÐÒÅÄÅÌÑÊ, É ÔÏÇÄÁ ÐÏÌÕÞÉÛØ ÏÛÉÂËÕ ÐÒÉ ÐÏÐÙÔËÅ ×ÙÐÏÌÎÉÔØ ÓÌÏÖÅÎÉÅ ÏÂßÅËÔÏ× ÒÁÚÎÙÈ ËÌÁÓÓÏ×.
á × ËÁËÏÍ ÑÚÙËÅ × ÄÁÎÎÏÍ ÓÍÙÓÌÅ ÈÏÒÏÛÏ? éíèï ÌÀÂÏÊ ÑÚÙË ÄÁÓÔ ÐÏÔÅÒÀ ÚÎÁÞÅÎÉÑ, ÅÓÌÉ ÒÅÚÕÌØÔÁÔ ÏÐÅÒÁÃÉÉ ÎÅÐÒÅÄÓÔÁ×ÉÍ ÔÉÐÏÍ ÒÅÚÕÌØÔÁÔÁ.
á ×ÏÔ ÅÓÌÉ ÎÕÖÎÙ runtime-ÐÒÏ×ÅÒËÉ - ÏÐÑÔØ ÄÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × C++ ÎÁÐÒÉÍÅÒ. :)

Hello, Alex Mogilnikov! You wrote in conference fido7.ru.embedded to Nickita A Startcev on Sat, 12 Sep 2009 17:49:09 +0400:

AM> А в каком языке в данном смысле хорошо? ИМХО любой язык даст потерю AM> значения, если результат операции непредставим типом результата.

Hе любой и не на любом железе. Бывают операции с насыщением, аппаратно реализованные, и их встроенной реализации в язык С не хватает.

AM> А вот если нужны runtime-проверки - опять добро пожаловать в C++ AM> например. :)

Оверхед большой. Иногда приемлемый, а иногда - нет.

dima

formatting link

ðÒÉ×ÅÔ, Dmitry Orlov!

12.09.2009 18:21 ÷Ù ÐÉÓÁÌÉ:

üÔÏ ÄÒÕÇÁÑ ÏÐÅÒÁÃÉÑ. òÅÞØ ÛÌÁ, ÎÁÓËÏÌØËÏ Ñ ÐÏÎÉÍÁÀ, ÏÂ ÏÂÙÞÎÙÈ ÏÐÅÒÁÃÉÑÈ ÔÉÐÁ ÓÌÏÖÅÎÉÑ, ËÏÔÏÒÙÅ × ÑÚÙËÅ ÅÓÔØ.

Hello Nickita.

Sat Sep 12 2009 13:54, Nickita A Startcev wrote to Kirill Frolov:

NAS> ëÓÔÁÔÉ, ÉÎÔÅÒÅÓÎÏ ÂÙÌÏ ÂÙ ÐÏÓÍÏÔÒÅÔØ ÎÁ ÑÚÙË/ËÏÍÐÉÌÑÔÏÒ/ÌÉÂÕ, ËÏÔÏÒÙÅ NAS> ÂÙ ÂÉÌÉ ÐÏ ÂÁÛËÅ ÚÁ ÐÏÐÙÔËÕ ÓËÌÁÄÙ×ÁÎÉÑ ÇÒÁÍÍÏ× Ó ËÉÌÏÇÒÁÍÍÁÍÉ.

áÄÁ, ÎÁÐÒÉÍÅÒ. åÓÌÉ Ñ ÐÒÁ×ÉÌØÎÏ ÐÏÍÎÀ, ÚÁÐÉÓØ ×ÉÄÁ

type Kilos is new integer;

ÏÐÒÅÄÅÌÉÔ ÔÉÐ, ÓÏ×ÍÅÓÔÉÍÙÊ ÔÏÌØËÏ Ó ÓÏÂÏÊ. á ÏÐÅÒÁÃÉÉ Ó ÄÒÕÇÉÍÉ ÔÉÐÁÍÉ ÎÁÄÏ ÏÐÒÅÄÅÌÑÔØ Ñ×ÎÏ.

Dimmy.

ðÒÉ×ÅÔ, Alex !

12 Sep 09 , 18:49 Alex Mogilnikov ÐÉÓÁÌ Ë Nickita A Startcev:

AM> ÷ AM> C++ ÐÒÏÇÒÁÍÍÉÓÔ ÓÁÍ ÓÏÚÄÁÅÔ ËÌÁÓÓÙ É ÏÐÒÅÄÅÌÑÅÔ ÄÏÐÕÓÔÉÍÙÅ ÏÐÅÒÁÃÉÉ Ó AM> ÎÉÍÉ.

HÏ ÏÐÔÉÍÉÚÉÒÕÅÔ, ÉÎÏÇÄÁ, ÏÞÅÎØ ÐÏÒÎÕÛÎÏ. HÁÐÒÉÍÅÒ, Ó ÃÉËÌÉÞÅÓËÉÍÉ ÓÄ×ÉÇÁÍÉ É Ó ÐÅÒÅÎÏÓÁÍÉ × ÌÀÂÏÍ ÓÌÕÞÁÅ ÐÏÌÕÞÁÅÔÓÑ ËÒÉ×ÏÊ ËÏÄ.

AM> èÏÞÅÛØ - ÏÐÒÅÄÅÌÉ ÏÐÅÒÁÃÉÀ ÓÌÏÖÅÎÉÑ ÇÒÁÍÍÏ× Ó ËÉÌÏÇÒÁÍÍÁÍÉ (ÉÌÉ AM> ÆÕÎÔÁÍÉ, ËÁÒÁÔÁÍÉ, ÓÌÏÎÁÍÉ), ËÏÔÏÒÁÑ ÂÕÄÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÅÌÁÔØ AM> ÎÅÏÂÈÏÄÉÍÙÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ. HÅ ÈÏÞÅÛØ - ÎÅ ÏÐÒÅÄÅÌÑÊ, É ÔÏÇÄÁ ÐÏÌÕÞÉÛØ AM> ÏÛÉÂËÕ ÐÒÉ ÐÏÐÙÔËÅ ×ÙÐÏÌÎÉÔØ ÓÌÏÖÅÎÉÅ ÏÂßÅËÔÏ× ÒÁÚÎÙÈ ËÌÁÓÓÏ×.

õÇÕ. ôÏÌØËÏ × Ó++ ÜÔÏ ÂÕÄÅÔ ÇÅÍÏÒÒÏÊÎÏ. ðÒÉÄÅÔÓÑ ÐÌÏÄÉÔØ ËÏÒÏÔËÉÅ, ÄÌÉÎÎÙÅ, ÓÒÅÄÎÉÅ; ÚÎÁËÏ×ÙÅ, ÂÅÚÚÎÁËÏ×ÙÅ; ÐÌÁ×ÕÞÉÅ - ÉÔÏÇÏ ÐÒÉÍÅÒÎÏ 9 ËÌÁÓÓÏ× ÄÌÑ ËÁÖÄÏÇÏ ÔÉÐÁ. ðÌÀÓ ÐÒÉÄÅÔÓÑ ×ÓÅ ËÏÎÓÔÁÎÔÙ ÒÕËÁÍÉ ÏÂÏÒÁÞÉ×ÁÔØ × ËÏÎÓÔÒÕËÔÏÒÙ, ÉÎÁÞÅ ÏÎÉ ÂÕÄÕÔ "ÐÒÏÓÔÏ ÉÎÔ" ÉÌÉ "ÐÒÏÓÔÏ ÄÁÂÌ". éÔÏÇÏ, × ÓÏ×ÒÅÍÅÎÎÏÍ Ó89/Ó99 (ÉÌÉ ËÁËÏÊ ÔÁÍ ÓÅÊÞÁÓ ÎÁ ÐÌÀÓÙ ÓÔÁÎÄÁÒÔ ÄÅÊÓÔ×ÕÅÔ?), ÜÔÏ ÔÏÌØËÏ ÄÏÂÁ×ÉÔ ÇÅÍÏÒÒÏÑ.

AM> á × ËÁËÏÍ ÑÚÙËÅ × ÄÁÎÎÏÍ ÓÍÙÓÌÅ ÈÏÒÏÛÏ? éíèï ÌÀÂÏÊ ÑÚÙË ÄÁÓÔ ÐÏÔÅÒÀ AM> ÚÎÁÞÅÎÉÑ, ÅÓÌÉ ÒÅÚÕÌØÔÁÔ ÏÐÅÒÁÃÉÉ ÎÅÐÒÅÄÓÔÁ×ÉÍ ÔÉÐÏÍ ÒÅÚÕÌØÔÁÔÁ.

÷ ÔÅÏÒÉÉ, ÔÕÔ ÍÏÖÎÏ ×ÙÚ×ÁÔØ ÉÓËÌÀÞÅÎÉÅ, ÉÌÉ ÅÝÅ ËÁËÏÅ 'into' ģÒÎÕÔØ. á ×ÏÔ, ËÓÔÁÔÉ, × È86 ÁÓÓÅÍÂÌÅÒÅ Ó ÒÁÚÒÑÄÎÏÓÔÑÍÉ ÔÁË: 8+8=8, 8-8=8 - ÒÁÚÒÑÄÎÏÓÔØ ÒÅÚÕÌØÔÁÔÁ ÓÏ×ÐÁÄÁÅÔ Ó ÒÁÚÒÑÄÎÏÓÔØÀ ÏÐÅÒÁÎÄÏ×, ÎÏ ÐÒÉ ÜÔÏÍ 64/32=32, 32/16=16, 16/8=8 É ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ 8*8=16, 16*16=32, 32*32=64; Á ËÏÍÐÉÑÔÏÒ ÓÉ ÎÁÇÌÏ ÐÏÒÔÉÔ ÐÏÓÌÅÄÎÉÅ ÒÁÓÛÉÒÅÎÉÑ ÒÁÚÒÑÄÎÏÓÔÉ.

AM> á ×ÏÔ ÅÓÌÉ ÎÕÖÎÙ runtime-ÐÒÏ×ÅÒËÉ - ÏÐÑÔØ ÄÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × C++ AM> ÎÁÐÒÉÍÅÒ. :)

ëÁË ×ÁÒÉÁÎÔ, ÎÏ ÔÁÍ ×ӣ ÓÔÒÁÛÎÏ ËÁË ÐÏ ÏÂߣÍÕ ÔÁË É ÐÏ ÂÙÓÔÒÏÄÅÊÓÔ×ÉÀ. :)

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... "ËáÎÔÏÒÁ çÏÓÕÄÁÒÓÔ×ÅÎÎÏÊ âÅÚÏÐÁÓÎÏÓÔÉ"

ðÒÉ×ÅÔ, Alex !

13 Sep 09 , 00:51 Alex Mogilnikov ÐÉÓÁÌ Ë Dmitry Orlov:

AM> üÔÏ ÄÒÕÇÁÑ ÏÐÅÒÁÃÉÑ. òÅÞØ ÛÌÁ, ÎÁÓËÏÌØËÏ Ñ ÐÏÎÉÍÁÀ, ÏÂ ÏÂÙÞÎÙÈ AM> ÏÐÅÒÁÃÉÑÈ ÔÉÐÁ ÓÌÏÖÅÎÉÑ, ËÏÔÏÒÙÅ × ÑÚÙËÅ ÅÓÔØ.

òÅÞØ ÛÌÁ Ï ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÈÉÔÒÙÈ ÐÒÏ×ÅÒËÁÈ ÐÒÉ ÏÐÅÒÁÃÉÑÈ Ó ÏÂÙÞÎÙÍÉ ÔÉÐÁÍÉ, ÔÏÞÎÅÅ, Ï ÚÁÐÒÅÔÅ ÎÅËÏÔÏÒÙÈ ÔÁËÉÈ ÏÐÅÒÁÃÉÊ. óÌÏÖÅÎÉÅ Ó ÎÁÓÙÝÅÎÉÅÍ ×ÙÌÅÚÌÏ ËÁË ÉÌÌÀÓÔÒÁÃÉÑ Ë ÔÅÚÉÓÕ "C++ ÄÏ×ÏÌØÎÏ ËÒÉ× É ÎÅ ÏÞÅÎØ ÕÄÏÂÅÎ".

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... âÙÓÔÒÏÒÁÓÔ×ÏÒÉÍÙÅ ÂÕÔÅÒÂÒÏÄÙ

Hello Alex Mogilnikov!

ö%~} "úÄÒÁ×ÓÔ×ÕÊ, ÖÁÂÁ - HÏ×ÙÊ çÏÄ !.."(Ã)

PS ñ ÐÒÏ java, ÎÁ ËÏÅÊ ÎÅ ÔÁË ÄÁ×ÎÏ ÐÒÉÛÌÏÓØ "×ÁÑÔØ" ÐÏÄ Siemens TC65

Hello Dmitry Orlov!

AM>> á ×ÏÔ ÅÓÌÉ ÎÕÖÎÙ runtime-ÐÒÏ×ÅÒËÉ - ÏÐÑÔØ ÄÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × C++ AM>> ÎÁÐÒÉÍÅÒ. :) DO> ï×ÅÒÈÅÄ ÂÏÌØÛÏÊ. éÎÏÇÄÁ ÐÒÉÅÍÌÅÍÙÊ, Á ÉÎÏÇÄÁ - ÎÅÔ.

á ÖÁÂÁ É ÐÒÅÓÌÏ×ÕÔÙÅ "ÁÐÐÁÒÁÔÎÏ-ÖÁÂØÉ ÍÅÌËÏÐÒÏÃÅÓÓÏÒÙ" ?

Hello, Alexander Konosevich! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sun, 13 Sep

2009 17:50:34 +0400:

AM>>> А вот если нужны runtime-проверки - опять добро пожаловать в C++ AM>>> например. :) DO>> Оверхед большой. Иногда приемлемый, а иногда - нет.

AK> А жаба и пресловутые "аппаратно-жабьи мелкопроцессоры" ?

Для PIC18 - абсолютно нет, а если 32 разряда и не жесткий реалтайм, то почему нет.

dima

formatting link

ðÒÉ×ÅÔ, Nickita A Startcev!

13.09.2009 12:38 ÷Ù ÐÉÓÁÌÉ:

üÔÏ ÅÇÏ ÌÉÞÎÙÅ ÐÒÏÂÌÅÍÙ. ëÔÏ ÅÇÏ ÚÁÓÔÁ×ÌÑÅÔ ÐÏÒÎÕÛÎÏ ÏÐÔÉÍÉÚÉÒÏ×ÁÔØ? ðÕÓÔØ ÏÐÔÉÍÉÚÉÒÕÅÔ ÎÅÐÏÒÎÕÛÎÏ. :)
íÙ ×ÓÅ ÅÝÅ ÇÏ×ÏÒÉÍ Ï ÏÐÅÒÁÃÉÑÈ Ó ÍÁÓÓÏÊ, ×ÙÒÁÖÅÎÎÏÊ × ÒÁÚÎÙÈ ÅÄÉÎÉÃÁÈ? HÅÐÏÎÑÔÎÏ, ÐÏÞÅÍÕ ÏÐÅÒÁÃÉÑ ÃÉËÌÉÞÅÓËÏÇÏ ÓÄ×ÉÇÁ ÍÁÓÓÙ × ÇÒÁÍÍÁÈ ÂÕÄÅÔ ËÒÉ×ÅÅ ÔÏÊ ÖÅ ÏÐÅÒÁÃÉÉ ÎÁÄ ÍÁÓÓÏÊ × ËÉÌÏÇÒÁÍÍÁÈ (ÉÌÉ ÎÁÏÂÏÒÏÔ). ñ ×ÉÖÕ ÒÁÚÌÉÞÉÅ ÔÏÌØËÏ × ÔÏÍ, ÞÔÏ ÐÒÉ ×ÙÞÉÓÌÅÎÉÑÈ ÎÁÄÏ ÎÅ ÚÁÂÙ×ÁÔØ ÕÍÎÏÖÁÔØ ÉÌÉ ÄÅÌÉÔØ ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ËÏÜÆÆÉÃÉÅÎÔ, Á ËÏÄ ÓÁÍÏÊ ÏÐÅÒÁÃÉÉ-ÔÏ ÂÕÄÅÔ ÏÄÉÎ É ÔÏÔ ÖÅ!
÷Ï-ÐÅÒ×ÙÈ, ÄÌÑ ÐÏÄÏÂÎÙÈ ÓÌÕÞÁÅ× ÓÕÝÅÓÔ×ÕÀÔ ÛÁÂÌÏÎÙ, ÏÎÉ ÐÏÍÏÇÁÀÔ ÓÉÌØÎÏ ÓÏËÒÁÔÉÔØ ÐÉÓÁÎÉÎÕ. ÷Ï-×ÔÏÒÙÈ, ÜÔÏ éíèï ÎÅÂÏÌØÛÁÑ ÐÌÁÔÁ ÚÁ ×ÏÚÍÏÖÎÏÓÔØ ×ÍÅÓÔÏ ÔÏÇÏ ÞÔÏÂÙ ÉÍÅÔØ "ÐÒÏÓÔÏ int" É ÓÁÍÏÍÕ ÐÏÍÎÉÔØ, ËÁËÁÑ ÐÅÒÅÍÅÎÎÁÑ × ËÁËÉÈ ÅÄÉÎÉÃÁÈ ×ÙÒÁÖÅÎÁ, ÏÄÉÎ ÒÁÚ ÏÂßÑÓÎÉÔØ ËÏÍÐÉÌÑÔÏÒÕ ÓÏÏÔÎÏÛÅÎÉÅ ×ÅÌÉÞÉÎ É ÂÏÌØÛÅ ÎÅ ÚÁÂÏÔÉÔØÓÑ Ï ÐÒÉ×ÅÄÅÎÉÉ Ë ÏÄÉÎÁËÏ×ÙÍ ÅÄÉÎÉÃÁÍ:

Lb lb = 10; Oz oz = 15; Gr gr = lb + oz; // × gr ÂÕÄÅÔ ÓÕÍÍÁ × ÇÒÁÍÍÁÈ 10 ÆÕÎÔÏ× É 15 ÕÎÃÉÊ.

éÌÉ, ËÁË ÔÙ É ÈÏÔÅÌ ÉÚÎÁÞÁÌØÎÏ, ÞÔÏÂÙ ËÏÍÐÉÌÑÔÏÒ ÐÒÏÓÔÏ ÎÅ ÐÏÚ×ÏÌÉÌ ÓÌÏÖÉÔØ ÒÁÚÎÏÒÏÄÎÙÅ ×ÅÌÉÞÉÎÙ, ÞÔÏ ÅÝÅ ÐÒÏÝÅ. ÷-ÔÒÅÔØÉÈ, éíèï ÅÓÌÉ × ÐÒÏÇÒÁÍÍÅ ÄÌÑ ÈÒÁÎÅÎÉÑ ÍÁÓÓÙ ÉÓÐÏÌØÚÕÅÔÓÑ 9 ËÏÍÂÉÎÁÃÉÊ "ÔÉÐ"-"ÚÎÁËÏ×ÏÓÔØ"-"ÅÄÉÎÉÃÁ ÉÚÍÅÒÅÎÉÑ", ÜÔÏ ÎÁ×ÏÄÉÔ ÎÁ ÍÙÓÌØ Ï... ËÁË ÂÙ ÜÔÏ ÐÏÍÑÇÞÅ ÓËÁÚÁÔØ... ÎÅËÁÞÅÓÔ×ÅÎÎÏÍ ÐÒÏÅËÔÉÒÏ×ÁÎÉÉ ÐÒÏÇÒÁÍÍÙ. :)

HÅ ×ÉÖÕ ÓÕÝÅÓÔ×ÅÎÎÙÈ ÒÁÚÌÉÞÉÊ ÍÅÖÄÕ

const int mass = 10;

É

const Kg mass = 10;

óÏÂÓÔ×ÅÎÎÏ, ÞÔÏ Ñ ÔÅÂÑ ÕÇÏ×ÁÒÉ×ÁÀ? ôÙ ÈÏÔÅÌ ÐÏÓÍÏÔÒÅÔØ ÎÁ ÑÚÙË, ËÏÔÏÒÙÊ ÜÔÏ ÍÏÖÅÔ - ÓÍÏÔÒÉ. HÒÁ×ÉÔÓÑ - ÐÏÌØÚÕÊÓÑ. HÅ ÎÒÁ×ÉÔÓÑ - ÎÅ ÐÏÌØÚÕÊÓÑ... :)
òÅÞØ Ï ÁÐÐÁÒÁÔÎÏÍ ÉÓËÌÀÞÅÎÉÉ? åÓÌÉ ÄÁ, ÔÏ ÐÒÉ ÞÅÍ ÔÕÔ ÑÚÙË ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ?
ðÏÇÏÄÉ-ËÁ. HÅ ÓÏ×ÓÅÍ ÐÏÎÉÍÁÀ, ÞÔÏ ÔÙ ÉÍÅÅÛØ × ×ÉÄÕ. åÓÌÉ ÒÅÚÕÌØÔÁÔ ÏÐÅÒÁÃÉÉ ÐÒÅÄÓÔÁ×ÉÍ ÔÉÐÏÍ ÒÅÚÕÌØÔÁÔÁ, ÎÉÞÅÇÏ ÐÏÔÅÒÑÎÏ ÎÅ ÂÕÄÅÔ. åÓÌÉ ÎÅÐÒÅÄÓÔÁ×ÉÍ - ÂÕÄÅÔ. ÷ÓÅ ÏÐÒÅÄÅÌÑÅÔÓÑ ÔÉÐÏÍ ÒÅÚÕÌØÔÁÔÁ. ÷ ÄÒÕÇÉÈ ÑÚÙËÁÈ ÎÅ ÔÁË? :)
óÔÒÁÛÎÏ ÐÏ ÓÒÁ×ÎÅÎÉÀ Ó ÞÅÍ? ó ÑÚÙËÏÍ ÓÉ? ÷ ÑÚÙËÅ C ÐÉÓÁÎÉÎÙ ËÁË ÒÁÚ ÂÏÌØÛÅ - ÔÙ ×ÓÅ runtime ÐÒÏ×ÅÒËÉ ÄÏÌÖÅÎ ÐÉÓÁÔØ ÓÁÍ, × ÔÏ ×ÒÅÍÑ ËÁË Ó C++ ÄÏÓÔÁÔÏÞÎÏ ÎÁÐÉÓÁÔØ ÐÒÏ×ÅÒËÕ ÏÄÉÎ ÒÁÚ × ÒÅÁÌÉÚÁÃÉÉ ÏÐÅÒÁÔÏÒÁ. ðÏ ÐÏ×ÏÄÕ ÂÙÓÔÒÏÄÅÊÓÔ×ÉÑ - ÓÏ×ÅÒÛÅÎÎÏ ÏÄÉÎÁËÏ×Ï, ÉÂÏ ÐÒÏ×ÅÒËÁ ×ÙÐÏÌÎÑÅÔÓÑ ÏÄÎÉÍ É ÔÅÍ ÖÅ ÍÁÛÉÎÎÙÍ ËÏÄÏÍ ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ËÁË É ÎÁ ËÁËÏÍ ÑÚÙËÅ ÏÎÁ ÏÐÉÓÁÎÁ. HÁÄÅÀÓØ, ÔÙ ÎÅ ÒÁÓÓÍÁÔÒÉ×ÁÅÛØ ÓÌÕÞÁÊ, ËÏÇÄÁ ÏÄÉÎ ËÏÍÐÉÌÑÔÏÒ ÒÁÂÏÔÁÅÔ ÈÕÖÅ ÞÅÍ ÄÒÕÇÏÊ... :)

Sat Sep 12 2009 13:01, Dmitry Orlov wrote to Kirill Frolov:

KF>> Запись 0b00010 HЕ ЯВЛЯЕТСЯ КОРРЕКТHОЙ для языка C, не DO> Это попросто не возможно потому, что на PC нт таких регистров.

В мире не существует ничего кроме пиков... спорить не вижу смысла.

[ZX]

Sat Sep 12 2009 12:02, Andrey Arnold wrote to Nickita A Startcev:

AA> Один мой коллега забивал(ет - его переманила почти двойной зарплатой AA> другая фирма) длину переменой и её знаковость, прямо в имя переменной. AA> У него впереди у имени переменной, или там, функции, стоит набор AA> из комбинаций букв bmnu и ещё каких-то... (я сейчас дома и не AA> могу посмотреть на его исходники) для него удобно именно это... а

Вот это я и имею ввиду, когда говорю, что хорошую идею венгерской нотации извратили донельзя и превратили в говнокод. Тип -- он и так известен, да и больше того -- HЕ ВАЖЕH вовсе. Совсем уж неправильно компилятор сделать не даст, а где возможно -- сам сконвертирует как нужно. В языках с динамической типизацией вовсе смешно вспоминать. А вот те же килограммы -- их видно только если 1) комментарии аккуратно писать, 2) вовремя глазами подглядывать -- что очень, действительно, неудобно, и имеет смысл, когда бардак с единицами, вностить и в имя.

AA> Это сказано безотносительно к тому, что я и сам пользуюсь теми AA> же u16, и вовсе не потому, что кому-то в таком случае, AA> что-то "видно сразу", а потому, что запись получается короче.

u16 может либо оказаться реально uint32_t, что вызовет побочные эффекты и глюки, либо приводить к генерации неэффективного кода. Hу если в мире нет ничего кроме pic18, или там msp430 -- беспокоиться нечего... но в общем случае это говнокод. Хотя бы потому, что для неспециальных случаев (unsigned) int -- всегда не менее эффективен и заведомо не имеет аккуратно подложенных граблей (просто потому, что программист знает, что его разрядность не фиксирована).

AA> Вот я и говорю, это твои потребности - для других (твоих коллег) может AA> быть и полезно знать твои наклонности, но не стоит преувеличивать AA> собственные предпочтения. Как и те же _BV(), int16_t и тп. из AA> библиотек winavr...

int16_t есть в ISO. Другое дело, что он, в общем-то скорей не нужен. Из имеющихся там типов полезными с ходу признать могу только int_fast*_t, int_least*_t и sig_atomic_t. Поддержка типов с конкретно заданной шириной (например int16_t) -- большой вопрос конкретному компилятору и CPU, и это скорей зло, нужное лишь в исключительных случаях. Вообще C он содержит много возможности "прострелить себе ногу", чем многие злоупотребляют, также и с самодельными типами.

[ZX]

Sat Sep 12 2009 12:53, Andrey Arnold wrote to Kirill Frolov:

NAS>>> TCCR0 = _BV(CS2) | _BV(FOC); NAS>>> еще короче и нагляднее. :) KF>> TCCR0 = 1<<CS2 | 1<<FOC; AA> Хрен редьки не слаще...

Hе слишком наглядно -- да. Зато работает сразу искаропки, работает с номерами разрядов (маски неудобны иногда, а то иначе TCCR0=CS2|FOC проще). Все остальные перечисленные методы требовали либо поддержки компилятора, либо специальных макросов.

[ZX]

Sat Sep 12 2009 12:53, Andrey Arnold wrote to Kirill Frolov:

NAS>>> TCCR0 = _BV(CS2) | _BV(FOC); NAS>>> еще короче и нагляднее. :) KF>> TCCR0 = 1<<CS2 | 1<<FOC; AA> Хрен редьки не слаще...

Hе слишком наглядно -- да. Зато работает сразу искаропки, работает с номерами разрядов (маски неудобны иногда, а то иначе TCCR0=CS2|FOC проще). Все остальные перечисленные методы требовали либо поддержки компилятора, либо специальных макросов.

[ZX]

Sat Sep 12 2009 14:54, Nickita A Startcev wrote to Kirill Frolov:

KF>> килограммы, а не граммы, в скорости метры в секунду, а не километры в KF>> час и т.п. Это действительно полезно, иначе когда используется для KF>> одного и того же много размерностей легко наделать ошибок. NAS> Полезно, но я такого ни разу не видел.

У Джоеля описано, если не ошибаюсь, откуда пошло.

NAS> Кстати, интересно было бы посмотреть на язык/компилятор/либу, которые бы NAS> били по башке за попытку складывания граммов с килограммами.

C++. Можно даже сделать корректное выполнение операций над тем и другим вперемешку. Как -- думаю очевидно. Да многие языки с нативной поддержкой ООП, другое дело, что далеко не все позволят это делать в арифметических выражениях.

NAS>>> В моих задачах полезнее видеть размер переменной и знаковость. NAS>>> Что-где-как искать обычно по контексту видно.

KF>> Потому беззнаковость имеет очень узкое применение: только там где KF>> она критична (uint8_t, 8-битные контроллеры где в int ничего не лезет KF>> и знаковое сравнение чисел заметно тяжелее...) NAS> либо жесткий реалтайм, где мы чуток экономим, урезав разрядность.

Типовой пример -- звук. Если он беззнаковый -- любые расчёты приводят к необходимости выделения отдельно знака, отдельно абсолютного значения, всё врукопашную -- оно надо? Кстати надо (я писал -- узкое применение). Вручную те же умножения, врукопашную выделив знак и приведя к unsigned, выполняются быстрей, чем если тупо перемножать знаковые да и ещё целые. Да, на 8-бит контроллере:

static sample_t sound_adjvol(sample_t v) { int_fast8_t sign; sign = (v<0); if (sign) v=-v; v = (unsigned)((uint_fast8_t)((v>>8)&0xff)*snd_vol) + (uint_fast8_t)((unsigned)((uint_fast8_t)(v&0xff)*snd_vol)>>8); if (sign) v=-v; return v; }

Hо это -- ОПТИМИЗАЦИЯ. По скорости, ибо >10000 раз/сек. Выполнялось после внимательного изучения листингов и подсчёта тактов. А оригинал был тривиален: return ((long)v*snd_vol)>>8; Замечу особо -- sample_t, несмотря на, везде знаковый.

NAS> А с переполнением в сях вообще всё плохо и лечится почти только

В каком-нибудь перле -- то же самое. И что характерно, многие языки с динамической типизацией (хотя бы тройка perl, tcl, python) по-умолчанию подразумевают int, ну или double, если в int не влезает. Иногда другие типы (длинные целые, рациональные числа). Hасильно получить unsigned возможности я что-то вовсе неприпоминаю. Эта неспроста...

NAS> расширением разрядности до избыточной. ну, или, порнографией типа NAS> if((a+b)<b)

Hет, мы исходим из того, что тип программист выбирал всё-таки такой, что туда гарантированно всё помещается. Просто человек, владея алгебраической логикой, может запросто что-то переставить в выражении, с левой части в правую и т.п., и всё математически останется корректно, и потому не скажешь сразу мол ошибка. А там отрицательная величина -- далее понятно.

[ZX]

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required