Típusok és a fordító
// in fract_typedef.h: typedef short fract16;
// in blackfin docs: endianness is little
za = 0xFF11 ; // 0b 00010001 11111111
zb = 1 ; // 0b 00000001 00000000
zc = 2 ; // 0b 00000010 00000000
zd = 1 / 2 ; // 0b 00000000 00000000
ze = 0.5r16 ; // 0b 00000000 01000000 (as short it is 2^14 = 16384)
zf = -0.75r16 ; // 0b 00000000 10100000 (as short it is -1*(2^14+2^13) = -24576)
//zg = 1r16; // warning: fract value cannot be represented exactly
//therefore the maximum fract value will be used
//zh = 2r16; // error: fractional constant is out of range
zi = mult_fr1x16(ze,zf); // 0b 00000000 11010000
zj = 24000 / 48000 * 7; // 0b 00000000 00000000
zk = 24000 / ( float ) 48000 * 7; // 0b 00000011 00000000
zl = ze * zf; // 0b 00000000 00000000 since 16384 times -24576 is out of range
zm = 0x0100 ; // 0b 00000000 00000001 (as short 2^8, as fract16 2^-7)
zn = 0x0080 ; // 0b 10000000 00000000 (as short 2^7, as fract16 2^-8)
zo = zm * zn; // 0b 00000000 10000000 (multiplication as shorts results in 2^8*2^7=-2^15)
zp = mult_fr1x16(zm,zn); // 0b 00000001 00000000 (multiplication as fract16s results in 2^-7*2^-8=2^-15)
// a wrongly choosen operator may lead to a proper result
//zq = 3*zm; // 0b 00000000 00000011 (as short it is 3*2^8, as fract16 2^-6+2^-7=3*2^-7, both of them are good)
//zq = mult_fr1x16(3,zm); // 0b 00000000 00000000 for (2^-14+2^-15)*2^-7 is out of fract16's range
//zq = -3*zm; // 0b 00000000 11111101 (as short -768, which is a correct result,
//as fract16 -(2^-6+2^-7)=-3*2^-7 which is as well)
zq = 0.25r16 ; // 0b 00000000 00100000 (as short 2^13, as fract16 2^-2)
zr = add_fr1x16(zq,zq); // 0b 00000000 01000000 correct as short as well as fract16
zr = zq + zq; // 0b 00000000 01000000 correct as short as well as fract16
// let us see some other examples
x = 1 ; // 0b 00000001 00000000 as fract16 it is 2^-15
y = -1 ; // 0b 11111111 11111111 as fract16 it is (-1)*2^-15
yy = -32767 ; // 0b 00000001 10000000 as fract16 it is (-1)*(1-2^-15)
q = add_fr1x16(x,y); // 0b 00000000 00000000 interpreting as fract16 it is zero,
//for 2^-15 more than (-1)*2^-15 is 0
qq = add_fr1x16(x,yy); // 0b 00000010 10000000 regarding as fract16: (-1)*(1-2*2^-15), which turns out correct,
// since 2^-15+(-1+2^-15) equals to -1+2*2^-15 in other form -(1-2*2^-15)
Programming reference of BF5xx
"Fractional Literal Values in C" című fejezet a "50_blackfin_cc.rev5_.1" leírásban
2021. ősze jegyzőkönyveinek értékelése
2022. ősze jegyzőkönyveinek értékelése
Hogyan érhetjük el az egyetemi virtuális gépet?
Kipróbált fejlesztőkártya otthonra, elérhető áron
Blokkoló és nem-blokkoló értékadás
Student groups and measurement time-table
Theoretical hints for the measurements