stryd_one Posted September 16, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
This N°9 Posted September 20, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
stryd_one Posted September 20, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
This N°9 Posted September 21, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
wackazong Posted September 29, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
stryd_one Posted September 29, 2008 Report Share Posted September 29, 2008 Crosspost Quote Link to comment Share on other sites More sharing options...
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.