2009年9月17日 星期四

LCM當機解法

最近收到LCM當機客訴。說會當機,經大陸工廠實測,機器連續運作200次會發生3次當機,但有的機器不會。


因為就是用我做的簡單多工,我自然必須去追。


問題是,當機率不高,實在不好抓。而且研發部只有一台機器,實在不容易做為代表。


我實在查不出那裡有問題,因為好像只有一個Task當,其他Task沒當掉。


所以只好在通訊解析上做了一個Buffer邊界檢查,然後請大陸工廠測。


結果很不錯,都沒當機。


這樣可以確定是通信品質有問題。


MCU的程式,果然是一點可能發生錯誤的可能性都不行,因為實在不知電子是否有穩定。





2009年9月11日 星期五

找質數

function prime(max_value)


    local value = 5;


    local index = 2;


    local root_index = 2;


    local limit = value * value;


    local p = {};


--  local count = 0;


--  initial first value start at 5


    p[1]=2;


    p[2]=3;


--  start find prime


    while value <= max_value do


        local sub_index=2;


        local check_not_prime = 0;


        while sub_index <= root_index do


--          count = count + 1; print(count,value,limit,index,sub_index,p[sub_index]);


        if (value % p[sub_index]) == 0 then check_not_prime = 1; break; end


            sub_index = sub_index + 1;


        end


        if check_not_prime == 0 then


          index = index + 1;


          p[index] = value;


        end


        value = value + 2;


        if( value >= limit ) then


            root_index = root_index + 1;


            limit = p[root_index+1] * p[root_index+1];


        end


    end


-- print all prime


    for i,j in pairs(p) do


        print(i,j);


    end


end


 


-- test


prime(100);


 


-- 程式結束


 


結果使用矩陣p{}儲存,所以要知道目前已有多少數目以index記錄。


已知只要找到現在驗證值value的開根以下的質數做驗證,所以加入root_index告知。


而現值超過上次有效質數平方limit,則要再更新。