[En-Nut-Discussion] NutEventPostFromIrq and C++
ethernut at stockelache.de
Sun Jul 30 20:40:04 CEST 2006
to be honest, I saw the compiler errors and did not think in detail about
Anyway I will try to explain what happened and my mistake:
Am 30.07.2006, 19:54 Uhr, schrieb Harald Kipp <harald.kipp at egnite.de>:
> Hi Matthias,
> I didn't check the final compiler result. For this specific case
> I'm quite sure that the macro version results in smallest and
> fastest code for C.
Your right, it might be faster with the inlined code, but at least we are
talking about one more call of a pointer address that should'nt be such a
problem also in the embedded world, but please forgive me when I am wrong,
I am x86 specialist, but I work hard to get also a expert on embedded ;-)
> I didn't think about any impact on C++. Actually I didn't understand
> your critics. If I'm not fully misunderstanding the procedure,
> the macro is handled by the preprocessor. Neither the C nor C++
> compiler will ever see any reference to NutEventPostFromIrq().
Sure, you can not think for every use case, and I do not expect that you
should even think in C++.
However, since I am still using C++, I am some how NutOS tester for
C++ usage. And if I see a problem, I just comment it to the admins.
> Further, the macro still uses a pointer reference to NUTTHREADINFO.
> I can't see, why a copy constructor would be required. The code
> NUTTHREADINFO *tp = *qp; \
> tp->td_qpec++; \
So what happend in my case was an error becouse of type mismatch, compiled
as C++ (in my sources) results in *tp = *qp. I get the following error
"invalid conversion from void* to NUTTHREADINFO*", and to fix this I did a
mistake and I got this copyconstuctor error. Sorry for confusion.
OK, now I just claim a missing cast:
NUTTHREADINFO *tp = (NUTTHREADINFO *) *qp; \
> could be interpreted as
> (NUTTHREADINFO *(*qp))->td_qpec++; \
> Did I miss something?
No, sorry again.
This is fine! No copy contructor is needed!
> At 17:46 30.07.2006 +0200, you wrote:
>> Hello all,
>> I do not know exactly from which version you introduced the "new"
>> NutEventPostFromIrq "function", might be 4.1.9rc4. However, I am not
>> really happy with this style. You replaced the function by a macro
>> define which is not very helpfull using C++. So my code demands now
>> copy constructors for NUTTHREADINFO....
>> However, I can not see any reason why you introduced a macro and do
>> not stick for the function, which would work fine for me. Just to
>> make clear, I do not claim the new modification / implementation of
>> the function itself. So, if there is not really a reason, please do
>> not use defines, which also recommends Scott Meyers ;-)
> En-Nut-Discussion mailing list
> En-Nut-Discussion at egnite.de
Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/mail/
More information about the En-Nut-Discussion