物聯網有五大領域
1. 穿載式
2. 智慧車
3. 智慧家庭
4. 智慧城市
5. 智慧工廠
MCU可發揮空間只有三個,穿載式、智慧家庭及智慧工廠。另外二項不是小公司玩的。
穿載式用在老人照護,看來做醫療儀器公司會去主導。
智慧工廠,就要看狀況了。
所以智慧家庭是MCU最有可能發揮的地方。
但智慧家庭的最大問題是,那一個才是智能家管中心?
控制中心可以確定,其他相關的家電才可以穩定發展。
現在智慧家庭其控制中心完全沒有規格。
大部分是專用,也有NAS,也有router。所以實在難以發展。
只能等控制中心穩定了。
2015年7月19日 星期日
2015年6月27日 星期六
AutoIt試用心得
必須往系統設計上發展,也就是MCU及PC程式皆要會寫。
但PC上太多資源不好查,又要很深入C++,這個學習時間太長。
後來找到外掛程式AutoIt,看來這個可以解決問題。
它可以做膠合程式及PC GUI界面,所以只要使用C程式就可以了。
後來發現其實AutoIt比原預期的多,變成可以做出大部分測試及外掛程式。
且AutoIt可用範圍也比我想的大,也就是簡單應用就全包了。
使用它,也可以簡單學習windows程式設計。
先玩TCP/IP,因為這個手機也會用到。
但PC上太多資源不好查,又要很深入C++,這個學習時間太長。
後來找到外掛程式AutoIt,看來這個可以解決問題。
它可以做膠合程式及PC GUI界面,所以只要使用C程式就可以了。
後來發現其實AutoIt比原預期的多,變成可以做出大部分測試及外掛程式。
且AutoIt可用範圍也比我想的大,也就是簡單應用就全包了。
使用它,也可以簡單學習windows程式設計。
先玩TCP/IP,因為這個手機也會用到。
MCU終極的應用程式Interpreter及Data Base
為何會說是終極,因為再做下去就是Shell了,用到Shell不如去用單板電腦上的Shell。
會有這一篇主要是做資源需求的記錄。
Interpreter的選擇比較多,易上手的是Lua。
Lua的ROM需求大約是300KB~400KB之間,因為還要加上User功能,所以只能給大約值。
主要的問題在RAM,因為程式是跑在RAM上,所以RAM的需求高些。這個不好估算。
要使用最小的Interpreter,就屬Forth了,ROM的容量從不到64KB到128kB。
看使用的Forth是用組合語言建造的,還是用C。
再來是Data Base,只有一套合用,就是SQLite。ROM大約要400KB,RAM需求不大。
但Data Base的速度依賴File System的速度。所以用在SDIO上是必須的。
以SD卡的高容量,Data Base應是很能發揮其功能。這點是Bee相當看好的新應用。
若是沒有用到查詢功能,理論上ROM可以更小,也許在250KB。
不使用查詢的狀況,大概是純記錄用,要解析時再將SD卡拿到PC去解析。
大部分還是機上查詢,還是算400KB,不然有擴充就完蛋了。
MCU上安裝Data Base是Bee以前從未想過的。
但在STM32F446出現,也開始考量這樣的需求。
但在MCU使用了Data Base之後,也表示MCU的軟體已經走到底了。
再複雓的應用,就是單板電腦接手了。
一項技術玩到底了,再來怎辦?
這成為Bee下一個思考的題目了!
會有這一篇主要是做資源需求的記錄。
Interpreter的選擇比較多,易上手的是Lua。
Lua的ROM需求大約是300KB~400KB之間,因為還要加上User功能,所以只能給大約值。
主要的問題在RAM,因為程式是跑在RAM上,所以RAM的需求高些。這個不好估算。
要使用最小的Interpreter,就屬Forth了,ROM的容量從不到64KB到128kB。
看使用的Forth是用組合語言建造的,還是用C。
再來是Data Base,只有一套合用,就是SQLite。ROM大約要400KB,RAM需求不大。
但Data Base的速度依賴File System的速度。所以用在SDIO上是必須的。
以SD卡的高容量,Data Base應是很能發揮其功能。這點是Bee相當看好的新應用。
若是沒有用到查詢功能,理論上ROM可以更小,也許在250KB。
不使用查詢的狀況,大概是純記錄用,要解析時再將SD卡拿到PC去解析。
大部分還是機上查詢,還是算400KB,不然有擴充就完蛋了。
MCU上安裝Data Base是Bee以前從未想過的。
但在STM32F446出現,也開始考量這樣的需求。
但在MCU使用了Data Base之後,也表示MCU的軟體已經走到底了。
再複雓的應用,就是單板電腦接手了。
一項技術玩到底了,再來怎辦?
這成為Bee下一個思考的題目了!
2015年6月20日 星期六
單板電腦興起壓迫MCU應用
四年前看到Cortex-A系列開始以低於10美元供應,會有新的應用。
只是後來沒有機會用上。
現在看到單板電腦用Cortex-A系列CPU做的單板電腦以低於10美元出現。
可以確定Cortex-A系列正式進入MCU市場,因為最後一個障礙已消失了。
Cortex-A之所以無法進入MCU市場,主要在於它是CPU,必須外掛RAM,使得Layout要使用多層板。
以MCU市場來說,多層板的價格及複雜度高,使得工程師不易採用。就算價格低,仍不具足夠吸引力。
若用單板電腦,是不用煩惱Layout但價格又會變高。
不過單板電腦價格再降,變成直接使用,現在就是如此。
單板電腦已有基本作業系統及函式庫,這是MCU比較缺的。
單板電腦的程式開發,軟體函式庫拼裝能力比較重要。
這種開發方式其實就和MCU使用RTOS開發是相同的。
也就是MCU工程師會使用RTOS,要轉成單板電腦是比較沒有問題。
所以低價單板電腦的出現,將MCU工程師再次分級。
單板電腦在GUI上的函式庫很多,可以輕易完成很好的GUI,這是MCU不易做的。
好的GUI是很好的加分附加,對於商品推展有很大的幫助。
使用單板電腦也有降低庫存的壓力,因為是半成本,變成不用備太多原物料。
使用半成品做開發,也有助於加速開發時程。
找工程師及訓練也比MCU工程人員好找。
可以預見的是單板電腦進入MCU市場,只會加速工程師換代。
使用RTOS會是快速評比新舊工程師的有效方法。
只是後來沒有機會用上。
現在看到單板電腦用Cortex-A系列CPU做的單板電腦以低於10美元出現。
可以確定Cortex-A系列正式進入MCU市場,因為最後一個障礙已消失了。
Cortex-A之所以無法進入MCU市場,主要在於它是CPU,必須外掛RAM,使得Layout要使用多層板。
以MCU市場來說,多層板的價格及複雜度高,使得工程師不易採用。就算價格低,仍不具足夠吸引力。
若用單板電腦,是不用煩惱Layout但價格又會變高。
不過單板電腦價格再降,變成直接使用,現在就是如此。
單板電腦已有基本作業系統及函式庫,這是MCU比較缺的。
單板電腦的程式開發,軟體函式庫拼裝能力比較重要。
這種開發方式其實就和MCU使用RTOS開發是相同的。
也就是MCU工程師會使用RTOS,要轉成單板電腦是比較沒有問題。
所以低價單板電腦的出現,將MCU工程師再次分級。
單板電腦在GUI上的函式庫很多,可以輕易完成很好的GUI,這是MCU不易做的。
好的GUI是很好的加分附加,對於商品推展有很大的幫助。
使用單板電腦也有降低庫存的壓力,因為是半成本,變成不用備太多原物料。
使用半成品做開發,也有助於加速開發時程。
找工程師及訓練也比MCU工程人員好找。
可以預見的是單板電腦進入MCU市場,只會加速工程師換代。
使用RTOS會是快速評比新舊工程師的有效方法。
2015年5月23日 星期六
MCU進入C++時代--個人觀點
MCU上使用C++並不是新事件。對Bee來說,只是何時?為何?
Bee很少使用C++,因為機會不多。連PC程式也都是用C寫的。
MCU開始使用SD卡,檔案系統出現後,PC/MCU程式開始不再分。
在使用GUI相關應用後,開始使用其他PC原始碼。
但常常可以找到的是C++程式碼。這種情況越來越多。
可以不用修改就在MCU執行PC程式,使用起來就像中毒一樣,因為實在太方便了。
沒多久就遇到要使用C++程式的問題。因為應用程式是c++寫的。
MCU目前仍以C為主,不管是驅動函式庫,RTOS,或是其他常用函式庫皆以C為主。
C++因為對記憶體需求高,另外經常調用動態記憶體。在記憶體不多的MCU上皆屬不合適使用的。
但現在MCU進展已很快了。不管是Cortex-A5系列的出現,或是支援Quad-SPI Flash的出現。
皆已解除應用程式容量問題。有了較大型應用程式出現,記憶體需求也提升。
SDRAM支援已是一般MCU擴充選項,所以對RAM的需求也沒有限制。
唯一的限制只剩下PC/MCU環境差異。RTOS及File system為MCU和PC最基本的需求。
在架好和PC相容環境後的MCU就可以直接使用PC原始碼。
再來就是遇到C++的應用程式。
因為底層系統仍是C,應用層則是C++,C/C++混合使用便是第一個要解決的。
就這樣,自然的在MCU上使用C++開始變成常態。
Bee很少使用C++,因為機會不多。連PC程式也都是用C寫的。
MCU開始使用SD卡,檔案系統出現後,PC/MCU程式開始不再分。
在使用GUI相關應用後,開始使用其他PC原始碼。
但常常可以找到的是C++程式碼。這種情況越來越多。
可以不用修改就在MCU執行PC程式,使用起來就像中毒一樣,因為實在太方便了。
沒多久就遇到要使用C++程式的問題。因為應用程式是c++寫的。
MCU目前仍以C為主,不管是驅動函式庫,RTOS,或是其他常用函式庫皆以C為主。
C++因為對記憶體需求高,另外經常調用動態記憶體。在記憶體不多的MCU上皆屬不合適使用的。
但現在MCU進展已很快了。不管是Cortex-A5系列的出現,或是支援Quad-SPI Flash的出現。
皆已解除應用程式容量問題。有了較大型應用程式出現,記憶體需求也提升。
SDRAM支援已是一般MCU擴充選項,所以對RAM的需求也沒有限制。
唯一的限制只剩下PC/MCU環境差異。RTOS及File system為MCU和PC最基本的需求。
在架好和PC相容環境後的MCU就可以直接使用PC原始碼。
再來就是遇到C++的應用程式。
因為底層系統仍是C,應用層則是C++,C/C++混合使用便是第一個要解決的。
就這樣,自然的在MCU上使用C++開始變成常態。
2015年3月16日 星期一
找質數程式2
改用快速開根
#include <stdio.h>
unsigned int test_number;
float SquareRootFloat(float number)
{
long i;
float x, y;
const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}
unsigned int not_prime(unsigned int x)
{
unsigned int q_x;
unsigned int i;
if ( !(x & 0x1) ) return 2;
q_x = SquareRootFloat(x);
for (i=3; i<=q_x; i+=2)
if ( x % i == 0 ) return i;
return 0;
}
void main()
{
test_number = 0x73d58987;
if ( test_number % 2 == 0 ) test_number--;
while ( not_prime(test_number) )
test_number -= 2;
printf("%d\n", test_number);
}
#include <stdio.h>
unsigned int test_number;
float SquareRootFloat(float number)
{
long i;
float x, y;
const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}
unsigned int not_prime(unsigned int x)
{
unsigned int q_x;
unsigned int i;
if ( !(x & 0x1) ) return 2;
q_x = SquareRootFloat(x);
for (i=3; i<=q_x; i+=2)
if ( x % i == 0 ) return i;
return 0;
}
void main()
{
test_number = 0x73d58987;
if ( test_number % 2 == 0 ) test_number--;
while ( not_prime(test_number) )
test_number -= 2;
printf("%d\n", test_number);
}
2015年3月12日 星期四
找質數程式
找一個質數,做為通信檢查用。
#include <stdio.h>
#include <math.h>
unsigned int test_number;
unsigned int not_prime(unsigned int x)
{
unsigned int q_t;
unsigned int i;
if ( !(x & 0x1) ) return 2;
q_t = sqrt(x);
for (i=3; i<=q_t; i+=2)
if ( x % i == 0 ) return i;
return 0;
}
void main()
{
test_number = 0x80000000;
if( test_number % 2 == 0 ) test_number--;
while( not_prime(test_number) )
test_number -= 2;
printf("%d\n", test_number);
}
#include <stdio.h>
#include <math.h>
unsigned int test_number;
unsigned int not_prime(unsigned int x)
{
unsigned int q_t;
unsigned int i;
if ( !(x & 0x1) ) return 2;
q_t = sqrt(x);
for (i=3; i<=q_t; i+=2)
if ( x % i == 0 ) return i;
return 0;
}
void main()
{
test_number = 0x80000000;
if( test_number % 2 == 0 ) test_number--;
while( not_prime(test_number) )
test_number -= 2;
printf("%d\n", test_number);
}
訂閱:
文章 (Atom)