2017年9月23日 星期六

選股條件

1.
連續 2 日,上漲
均線多頭排列
大紅棒 (漲幅超過 3 %)

2.
均線多頭排列
近 3 日, 外資 買超張數 前 30 名
最近 3 日漲幅 排名前 30 名

3. 
均線多頭排列
成交量 連續3日 增加
今天 盤中 突破 5 日新高

2017年9月21日 星期四

如何Kill child process by fork() 創建

pid = fork()之後,如pid為0,是child的執行程式段,
child程式段,註冊了一個alarm signal,callback function為killchild(),
這邊調用alarm(3),即三秒後會發出alarm signal到這個程序,
再調用kill()砍掉目前的process,即child process。
#include <stdio.h>
#include <signal.h>

void killchild(int signum)
{
        printf("kill id = %d\n", getpid());
        kill(getpid(), SIGKILL);
}

int main()
{
        pid_t pid;
        pid = fork();

        if(pid == 0)
        {
                printf("child id = %d\n", getpid());

                signal(SIGALRM, killchild);
                alarm(3);

                while(1);
        } else if(pid < 0){
                printf(" we have an error\n");
        } else {
                printf("parent id = %d\n", getpid());
                while(1);
        }
}
程序運行後,先打印parent process ID和child process ID,
三秒之後,再kill child process。
pi@raspberrypi:~/Work $ gcc test.c -o test && ./test
parent id = 1750
child id = 1751
kill id = 1751
程序運行後,調用ps來看這個程序創建的兩個process,
1750為parent process,1751為child process,
在三秒後,即alarm signal發出後,可以看到child process狀態變為defunct
狀態defunct,即為zombie process,表示child process已被砍掉,
但由於parent process還在運行,所以child process資源還無法完全釋放,
此child process就變成zombie process。
pi@raspberrypi:~ $ ps -aux | grep test
pi        1750 52.5  0.0   1680   356 pts/0    R+   00:08   0:01 ./test
pi        1751 53.0  0.0   1680    84 pts/0    R+   00:08   0:01 ./test
pi        1753  0.0  0.2   4276  1908 pts/1    S+   00:08   0:00 grep --color=auto test
pi@raspberrypi:~ $
pi@raspberrypi:~ $
pi@raspberrypi:~ $
pi@raspberrypi:~ $
pi@raspberrypi:~ $ ps -aux | grep test
pi        1750 92.6  0.0   1680   356 pts/0    R+   00:08   0:04 ./test
pi        1751 59.8  0.0      0     0 pts/0    Z+   00:08   0:02 [test] 
pi        1755  0.0  0.2   4276  2004 pts/1    S+   00:09   0:00 grep --color=auto test
參考來源
https://stackoverflow.com/questions/35898631/child-process-kill-itself-after-3-seconds-in-fork

2017年9月19日 星期二

WM8960 放音 & 錄音

1. 音頻系統名詞
Master clock:每一個音頻子系統都需要一個主時鐘,通常被稱作MCLK或者SYSCLK,主時鐘可以來自外部振盪器或者CPU系統時鐘,某些時鐘源是
可以配置的,通常為了省電會降低系統的工作頻率。

DAI(digital audio interface) Clocks:通常由BCLK驅動(bit clock),主要用來驅動CPU和codec之間的數位電路。
同時 DAI 在每個audio封包的開始也有一個時鐘,這個時鐘也常被成為 LRCLK(左右聲道時鐘),這個時鐘的頻率和採樣率頻率相同。

BCLK的產生:
BCLK = LRC * Channels * Word Size 
     = SampleRate * NumChannels * BitsPerSample
     = 44.1k * 2 * 16 bit
     = 1.41M

2. WM8960 mode
Master mode & Slave mode
3. WM8960放音 ADCDAT: ADC data output ADCLRC: ADC data alignment clock DACDAT: DAC data input DACLRC: DAC data alignment clock BCLK: Bit clock, for synchronisation 在Master Mode下,放音時,SoC使用I2S介面,發送BCLK, DACLRC, DACDAT至WM8960。
4. WM8960錄音
ADCDAT: ADC data output
ADCLRC: ADC data alignment clock
DACDAT: DAC data input
DACLRC: DAC data alignment clock
BCLK: Bit clock, for synchronisation 

在Master Mode下,放音時,SoC使用I2S介面,發送BCLK, DACLRC至WM8960,接收ADCDAT從WM8960。
5. 參考來源
https://read01.com/zh-tw/z83nJ2.html#.WcEizbKg9dg
https://d3uzseaevmutz1.cloudfront.net/pubs/proDatasheet/WM8960_v4.2.pdf
https://d3uzseaevmutz1.cloudfront.net/pubs/manual/WM8960_6158_FL32_M_REV1_Example_Configurations.pdf