Archive for EE相關

GCC 編譯心得

include math.h時 需要在編譯的時候加上 -lm參數(for linker)
ex: gcc ex.c -lm -o ex

include stdio.h 需要加上-lc 參數
一般不加的原因, 是因為-lc是default參數

[轉貼]perl dec2hex

#!/usr/bin/perl

$foo = 123;
$hexval = sprintf(“%x", $foo);
$decval = hex($hexval);

print “\n$foo in hex is $hexval and in dec is $decval\n";

gray code 和 binary 互換

assign g2b[3] = wptr[3];
assign g2b[2] = g2b[3] & wptr[2];
assign g2b[1] = g2b[2] & wptr[1];
assign g2b[0] = g2b[1] & wptr[0];

gcode = gray code
assign g2b[3] = gcode[3];
assign g2b[2] = g2b[3] & gcode[2];
assign g2b[1] = g2b[2] & gcode[1];
assign g2b[0] = g2b[1] & gcode[0];

assign b2g[3] = bcode[3];
assign b2g[2] = bcode[3] & bcode[2];
assign b2g[1] = bcode[2] & bcode[1];
assign b2g[0] = bcode[1] & bcode[0];

指標心得1

tmp_s = (volatile unsigned int *) 0x1FFCF000;
for(k=0;k<40;k++)
{
*((volatile unsigned int *)(tmp_s))=k;
tmp_s = tmp_s + 1;
}

unsigned int k,len;
volatile unsigned int *tmp_s;

tmp_s = (volatile unsigned int *) 0x1FFCF000;

for(k=0;k<40;k++)

{

*((volatile unsigned int *)(tmp_s))=k;

tmp_s = tmp_s + 1;

}

上面寫法由armcc compile之後每次addr是跳4.

若改成

tmp_s = (volatile unsigned int *) 0x1FFCF000;
for(k=0;k<40;k++)
{
*((volatile unsigned int *)(tmp_s))=k;
tmp_s = tmp_s + 1;
}

unsigned int k,len,tmp_s;

tmp_s = 0x1FFCF000;

for(k=0;k<40;k++)

{

*((volatile unsigned int *)(tmp_s))=k;

tmp_s = tmp_s + 1;

}

則每次addr跳1.
與宣告變數型態有關.