stryd_one Posted September 16, 2008 Report Posted September 16, 2008 what's wrong with a shift?I didn't say there was anything wrong with a shift. it's a native operation of the processor, therefore fast and there's a native operator in C?That's correct.maybe you could use a byte-address to do what you want?:<snip>All that work demonstrates that you've kinda missed my point - I expected the language to take care of this, without my interaction, without writing extra code, without messing around, etc. It doesn't. No problem! I just kinda assumed that it would be 'smarter' than it is. Quote
This N°9 Posted September 20, 2008 Report Posted September 20, 2008 All that work demonstrates that you've kinda missed my point - I expected the language to take care of this, without my interaction, without writing extra code, without messing around, etc. It doesn't. No problem! I just kinda assumed that it would be 'smarter' than it is. I think the target of C is to have a language that is more "human" than asm, but enough close to the machine to generate fast code. therefore too much overhead would not do it any good. I expected the language to take care of thishow should the language "now" what you want to do if you don't tell it ?but C++ is very powerfull, you could for example write your own operator, that gives you the msb ofan int as result. you can write operators like objects. I never did this, but I think this is a very powerfullfeature. you can even "overload" operators, e.g. if you want to simply add two strings with "+", you canoverload the "+" operator and write a routine to process the string-addition. all other types will be handledstill in the native manner. check it out..I hope this input is usefull for you ;) Quote
stryd_one Posted September 20, 2008 Report Posted September 20, 2008 I think the target of C is to have a language that is more "human" than asm, but enough close tothe machine to generate fast code. therefore too much overhead would not do it any good.That's a good point. It's one of the things I have grown to like about C, is that it stays quite low-level, without needing me to do *all* of the thinking ;)how should the language "now" what you want to do if you don't tell it ?Magic, of course ;D Hehehe... well of course there are ways to handle it, but in the end, the way it is done makes sense.but C++ is very powerfull<snip>I hope this input is usefull for you ;)Yeh, thanks dude. I don't know squat about C++! Quote
This N°9 Posted September 21, 2008 Report Posted September 21, 2008 I don't have so much experience with C, but during a period with no regular job, I read a book about the language, and made my notes like a proper student ;Dso I can refer them now, thats very usefull. also I'am familar with the syntax from writing in PHP and JavaScript. There is still some stuff that confuses me, but what I like about C: it seems to be weird, but in the end it is very consequent. Quote
wackazong Posted September 29, 2008 Report Posted September 29, 2008 I did the interpolation algorithm in C, have a look at the code, should work. It interpolates in 33 steps, step can be 0 to 32.///////////////////////////////////////////////////////////////////////////// // Interpolate ///////////////////////////////////////////////////////////////////////////// unsigned char KNOEPFLI_Interpolate32(unsigned char step, unsigned char value1, unsigned char value2) { unsigned char swap, diff; //send out value2 if step is the max value if( step == 32 ) { return value2; }; //send out value1 if step i 0 if( step == 0 ) { return value1; }; //invert the interpolation if value1 > value2 if( value1 > value2 ) { //swap the values swap = value2; value2 = value1; value1 = swap; //--step because we are counting from 0 to 32, not to 31 --step; //invert the step counter step = ~step; //clear the upper three bits step &= 0x1f; }; //get the difference diff = value2 - value1; //divide it through the total number of steps (>>5) and multiply it with step (gives an integer) then get the high byte, //shift the step counter three to the left to make it 8bit, store it in PRODL PRODL = step << 3; //store diff in PRODH PRODH = diff; //do the multiplication in assembler __asm movf _PRODL, W mulwf _PRODH, 0 __endasm; //add the lower value return value1 + PRODH; } Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.