Rendszerarchitektúrák

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)

Forrásfájl

Kiegészítők1

Kiegészítők2

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

Digitális technika

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

Intelligent Embedded Systems

Subject's data sheet

CrossCore manual #1

Student groups and measurement time-table

Safety regulation

Theoretical hints for the measurements

Scores 2024. autumn