2013年3月19日 星期二
CPU市場鐵律:量變引發質變
意思是當某種型式CPU在市場上佔有數量優勢時,就會形成絶對性優勢。
這和CPU本身品質無關,只因硬體相容性可以讓軟體好好發展。
而要佔有數量,價格不用說一定要夠低,另一種是開放性,非獨家生產。
PC市場因壟斷較看不出來,但MCU卻是很明顯。
8051是8位元MCU的霸主,因為大家都可以做硬體。
16位元來不及有霸主就直接進入32位元MCU時代。
而32位元MCU的霸主正在形成。
硬體統一完畢,再來會變成軟體開始統一。
結果也會有類似的現象,會有統一的軟體架構出現。
又走"量變引發質變"這條路,軟體架構的品質不是重點,而是使用量。
不管軟硬體,使用者習慣才是主導,而市場往使用者多的方向走。
2013年3月16日 星期六
Cortex M4推展不如預期
主因是,要浮點運算做什麼?
往8位元MCU轉來的工程師,對於能在32位元上開發程式已是很開心,要玩的一堆,還沒有意識到浮點運算要如何用,那又何必多花錢。
而從PC轉來的工程師對於CM4的執行效能根本看不上眼,去玩Cortex-A8還比較實在,因為Cortex-A8也不貴。
這樣的局面造成CM4不上不下的樣子。
還有各廠商自行發展的32位元處理器,其實Bee也不太看好。
現在市場已經轉成由軟體來主導,要換MCU談何容易。連軟體工具都要換新,那來那個時間。
至少CM3還可以降為CM0或升級為CM4,光是這樣就可以吃很久,那還有機會看別的MCU。
萬一有什麼大的應用,轉到Cortex-A8也是不差的選擇。
MCU現在只是一個骨架系統,再來需求會轉往拼裝系統的速度。
再來就要看工程師如何快速拼裝系統,拼裝快硬體價格低才是重點。
2013年3月14日 星期四
簡單多工於Cortex-M3上最佳化
原程式:
void main(void)
{
InitSystem();
INIT_DEVICE();
while (1)
{
switch (Task_State[FuncID])
{
case TASK_RUNNING :
TaskFunc[FuncID]();
break;
case TASK_SKIP :
if ( Task_Delay_Count[FuncID] )
{
Task_Delay_Count[FuncID]--;
if (! Task_Delay_Count[FuncID]) WakeUp(FuncID);
}
break;
default:
break;
}
if ( ++FuncID >= TASK_NUM ) FuncID = 0;
}
}
新程式:
void main(void)
{
InitSystem();
INIT_DEVICE();
while (1)
{
register unsigned int temp_id;
register unsigned int temp_delay;
temp_id = FuncID;
switch (Task_State[temp_id])
{
case TASK_RUNNING :
TaskFunc[temp_id]();
break;
case TASK_SKIP :
temp_delay = Task_Delay_Count[temp_id];
if ( temp_delay )
{
temp_delay--;
Task_Delay_Count[temp_id] = temp_delay;
if (! temp_delay) WakeUp(temp_id);
}
break;
default:
break;
}
if ( ++temp_id >= TASK_NUM ) temp_id = 0;
FuncID = temp_id;
}
}
因核心程式執行未檢討有無可以改善空間,因此段程式決定各工作間的掃描率,若是可以改善將增加工作效率。
分析原本的程式,發現有多一些記憶體存取動作。
於是將記憶體動作簡化,中間使用暫存器的方式應可以加速。
先將FuncID這個變數用暫存器變數取出,編出來的程式少了一個指令。
又將Task_Delay_Count[]也用暫存器變數,有少一點組合語言指令。
主要廻圈原需要16個指令,現在只剩下12個指令,少了四個指令。
原16個指令需要23個Clock執行時間,現在12個指令只要19個Clock執行時間。
用示波器實測,Skip 1000次需時5.02ms,原先為6.80ms,確實加速執行時間。
不過Cortex M3用暫存器變數直接使用int會比short及char來得有效率。中間會少了正負號擴張指令,所以速度會更快。
2013年3月6日 星期三
Cortex-M4開啟新MCU戰場
CM3因為ST已是獨大,所以各廠商就將重心移往CM4。
直到最近TI推展CM4時,才發現價格已經壓到US$3以下。
有浮點運算器的MCU是這樣的價格,等於ADC/DAC不用什麼錢。
其他可以用於浮點運算的應用可以普及。
這樣的轉變,離上次Bee認為32位元MCU變革,只過了剛好一年。
32位元浮點運算,已不是8位元MCU可以做的事。
再下來會大量使用的演算法如:
矩陣運算、傅利葉轉換等等,都會變成非常容易達成。
這樣子MCU程式和PC程式之間差異就更小了。
看來只剩作業系統相容度的問題了。
另一個是使用浮點運算時,可能有效能不足需稍長的時間。
使用作業系統將長時間運算程式做為低優先權的運算,這樣的應用會增多。
RTOS因CM4的出現將會推展的更快。