有沒(méi)有運(yùn)行內(nèi)存大于250k的arduino芯片? arduino用的芯片是什么型號(hào)?
可信任的也就是esp8266和esp32
這倆貨多便宜啊,其他的垃圾玩意今年價(jià)格都飛起來(lái)了
針腳太少不是有拓展嗎,你是對(duì)片子大小有要求嗎
Arduino 328p 用的芯片 屬于 哈弗結(jié)構(gòu),他把存儲(chǔ)區(qū)分為 三個(gè)部分:1. FLASH 程序存儲(chǔ)區(qū), 2. RAM 動(dòng)態(tài) 內(nèi)存,3. ROM 區(qū) 。他不同于 馮諾依曼 結(jié)構(gòu)的 程序存儲(chǔ)區(qū) 和 RAM 內(nèi)存是在一起的。
由于 程序存儲(chǔ)區(qū) 和 RAM 內(nèi)存 是分開(kāi)的,于是就有了 32K 的 FLASH 程序存儲(chǔ)區(qū) 和 2K 的 RAM 動(dòng)態(tài)內(nèi)存,當(dāng)然還有 ROM .
32K 的 FLASH 程序存儲(chǔ)區(qū) 是存放 你的 經(jīng)過(guò) 編譯的 程序本體。 2K 的 RAM 動(dòng)態(tài)內(nèi)存 是存放 程序運(yùn)行時(shí) 需要的 臨時(shí) 變量。
由于 Arduino 本初的 想發(fā)是 給那些 非 計(jì)算機(jī)專(zhuān)業(yè)的 設(shè)計(jì)者們 使用的,所以他使用了人們習(xí)慣的思維方式來(lái)編程。于是他發(fā)明了很多自己專(zhuān)用的 指令(確切的說(shuō)應(yīng)該是 函數(shù),或 宏替換 ),這樣,就帶來(lái)了 代碼 不精練的 問(wèn)題。當(dāng)然 宏替換 沒(méi)有問(wèn)題。
這不等于不 高效 和不 簡(jiǎn)練,因?yàn)?Arduino IDE 是 基于 C / C++ 的 編譯器, C / C++ 在 編譯時(shí) 還是做了很多 代碼優(yōu)化工作。
我們看 幾個(gè) 例子: Arduino IDE 版本 1.6.6
1. 編譯一個(gè) 空 程序
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Arduino IDE 版本 1.6.6 顯示的 編譯結(jié)果:
項(xiàng)目使用了 450 字節(jié),占用了 (1%) 程序存儲(chǔ)空間。最大為 30,720 字節(jié)。
全局變量使用了9字節(jié),(0%)的動(dòng)態(tài)內(nèi)存,余留2,039字節(jié)局部變量。最大為2,048字節(jié)。
這個(gè)程序 什么也沒(méi)有做,他也要占用 這么多 空間。 那是因?yàn)?他要 初始化 各個(gè)端口 和 很多 寄存器,還要 運(yùn)行 上面那段 看起來(lái)像是 空代碼 的代碼。
看看 Arduino IDE 他 隱藏 包含的 main.cpp
int main(void) // 這是一段 c 程序
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
這就是 我們看得到 Arduino IDE 編程器的 初始 界面 ,別看他是 空的,但是 上面的代碼是要 運(yùn)行的。
記住 這段 空代碼 使用的 空間,我們?cè)僮?下面的 實(shí)驗(yàn),給個(gè) Arduino 自帶的 經(jīng)典代碼,點(diǎn)亮 一顆 LED 燈。
void setup() {
pinMode(13, OUTPUT); // 將 D13 端口 設(shè)置為 輸出, 因?yàn)?他上面 連著 一顆 LED 燈。
}
void loop() {
digitalWrite(13, HIGH); // 將 D13 設(shè)為 高電平, 點(diǎn)亮 LED 燈。
delay(1000); // 延時(shí) 1秒
digitalWrite(13, LOW); // 將 D13 設(shè)為 低電平, 關(guān)閉 LED 燈。
delay(1000); // 再 延時(shí) 1秒
}
編譯他:
項(xiàng)目使用了 1,030 字節(jié),占用了 (3%) 程序存儲(chǔ)空間。最大為 30,720 字節(jié)。
全局變量使用了9字節(jié),(0%)的動(dòng)態(tài)內(nèi)存,余留2,039字節(jié)局部變量。最大為2,048字節(jié)。
這個(gè)程序 占用的空間是 1030 - 450 = 580 字節(jié)。 (本次編譯 使用空間 1030 字節(jié) - 空程序 使用空間 450 字節(jié)。)
變量 占用的 RAM 空間 還是 9 字節(jié),這是因?yàn)?nbsp; 上面的 4 個(gè) 看起來(lái)像變量數(shù)據(jù) (13, OUTPUT ,HIGH,LOW )其實(shí)都是 宏 替換,占用的是 FLASH 程序存儲(chǔ)區(qū)。
為了敘述方便,我們只改動(dòng) 一條 語(yǔ)句。
void setup() {
// pinMode(13, OUTPUT); // 注釋掉 這一句,不讓他 參與 編譯
}
void loop() {
digitalWrite(13, HIGH); // 將 D13 設(shè)為 高電平, 點(diǎn)亮 LED 燈。
delay(1000); // 延時(shí) 1秒
digitalWrite(13, LOW); // 將 D13 設(shè)為 低電平, 關(guān)閉 LED 燈。
delay(1000); // 再 延時(shí) 1秒
}
再次 編譯 他,看看 FLASH 程序存儲(chǔ)區(qū) 占用情況。
項(xiàng)目使用了 900 字節(jié),占用了 (2%) 程序存儲(chǔ)空間。最大為 30,720 字節(jié)。
全局變量使用了9字節(jié),(0%)的動(dòng)態(tài)內(nèi)存,余留2,039字節(jié)局部變量。最大為2,048字節(jié)。
他比 上次 編譯 節(jié)省了 1030 - 900 = 130 字節(jié),而且他是 能工作的 ,只是 LED 燈 很暗 ,在很暗的地方可以看清他。
為什么 他還能亮呢? 因?yàn)?編譯器在什么程序也不編譯的時(shí)候,他還是要初始化 各個(gè) 端口的,這時(shí) PB 端口 都被 初始化成 輸入狀態(tài),AVR 的 芯片 在 端口為 輸入狀態(tài)時(shí),給他寫(xiě)入 高電平,就啟動(dòng)了 上拉 電阻,電壓從 正電源 通過(guò) 上拉電阻傳遞給了 LED ,盡管 電流非常小,但是他還是亮了。這也是 空程序 也要占用空間的原因。
那么 pinMode(13, OUTPUT); 語(yǔ)句為什么要占用 130 字節(jié)的空間呢,因?yàn)?Arduino 指令 格式 是 16 比特,也就是 2 字節(jié),參數(shù) 13 要用 2 字節(jié),OUTPUT 要用 2 字節(jié),調(diào)用 pinMode( ) 函數(shù) 要用 4 字節(jié),剩下的 是 函數(shù) pinMode( ) 本身 要占用的 空間,由于 IDE 版本 不一樣, 函數(shù) 本身 要占用的 空間 也不一樣,大家可以 試試。
這個(gè)程序 不能正常 干活,我們換條指令 讓他 正常 干活。看下面的程序:
void setup() {
// pinMode(13, OUTPUT); // 注釋掉 這一句, 改為 下面 一句
bitSet(DDRB,5); // 設(shè)置 PB 端口的 DDR 輸出寄存器 第 5 位 為輸出狀態(tài),(就是 D13 端口)
}
void loop() {
digitalWrite(13, HIGH); // 將 D13 設(shè)為 高電平, 點(diǎn)亮 LED 燈。
delay(1000); // 延時(shí) 1秒
digitalWrite(13, LOW); // 將 D13 設(shè)為 低電平, 關(guān)閉 LED 燈。
delay(1000); // 再 延時(shí) 1秒
}
編譯一下,奇跡出現(xiàn)了,
項(xiàng)目使用了 902 字節(jié),占用了 (2%) 程序存儲(chǔ)空間。最大為 30,720 字節(jié)。
全局變量使用了9字節(jié),(0%)的動(dòng)態(tài)內(nèi)存,余留2,039字節(jié)局部變量。最大為2,048字節(jié)。
bitSet(DDRB,5); 語(yǔ)句 只用了 2 字節(jié) 空間,而且和 pinMode(13, OUTPUT); 語(yǔ)句 干的事 同樣的 活。
這就是 Arduino ,他用 自己的 語(yǔ)言 方便了 我們,使我們能 很快 入門(mén),但又使我們的程序 冗長(zhǎng),并且執(zhí)行效率也不高。
愛(ài)他,因?yàn)槲覀?很笨,恨他,因?yàn)槲覀兿铀?很笨。
回到 你的 問(wèn)題,我確實(shí)不知道誰(shuí)運(yùn)行內(nèi)存>250kb,但是我們知道的是,
1. 編寫(xiě)的代碼的 種類(lèi) 要盡可能的少,因?yàn)?每條 相同的函數(shù) 本身只占 一個(gè)空間,而每次 調(diào)用他 只占 很少的 空間,不信你可以多加幾條 pinMode( , ); 語(yǔ)句,看看他占用的空間是不是成倍增加。
2. 最寶貴的是 RAM 空間,要盡量的 少用 全局 變量,因?yàn)?局部 變量 每次使用完后,他會(huì)釋放 內(nèi)存空間給其他變量使用。
3. 相同功能,不同發(fā)布者,占用的空間不一樣,比如:驅(qū)動(dòng) OLED 屏的庫(kù)文件。 u8g 占用的空間最少, SSD1306 次之,Adafruit_SSD1306-master 占用空間最多。
一句話:嫌內(nèi)存少就別用arduino(狗頭保命)
有沒(méi)有運(yùn)行內(nèi)存大于250k的arduino芯片?
回到 你的 問(wèn)題,我確實(shí)不知道誰(shuí)運(yùn)行內(nèi)存>250kb,但是我們知道的是,1. 編寫(xiě)的代碼的 種類(lèi) 要盡可能的少,因?yàn)?每條 相同的函數(shù) 本身只占 一個(gè)空間,而每次 調(diào)用他 只占 很少的 空間,不信你可以多加幾條 pinMode( , ); 語(yǔ)句,看看他占用的空間是不是成倍增加。2. 最寶貴的是 R...
相關(guān)評(píng)說(shuō):
清澗縣慣性: ______ 機(jī)身內(nèi)存只有250K的話只能給你說(shuō)你基本上沒(méi)有什么可玩性了.你最好下載100K一下的游戲,不要超過(guò)150K.可能能玩.大的話你基本上是玩不了,即使能玩也是非常的艱難.你的java可能是個(gè)mtk平臺(tái)的java模擬器生成的,很差勁的.你可以設(shè)置機(jī)型稱(chēng)nokia 2610;這個(gè)機(jī)子的java版本很低,應(yīng)該能勉強(qiáng)能用 .運(yùn)行內(nèi)存必須是手機(jī)內(nèi)存,所以你是運(yùn)行不了大程序的,機(jī)身內(nèi)存和內(nèi)存卡就像電腦的內(nèi)存條和硬盤(pán)內(nèi)存一樣,內(nèi)存小就不能運(yùn)行大的程序,你的是mtk平臺(tái)無(wú)系統(tǒng)手機(jī)
清澗縣慣性: ______ BBK I389的JAVA能力,JAR文件限制最大不能超過(guò)250K,否則不能運(yùn)行,超過(guò)200K能運(yùn)行就不錯(cuò)了.
清澗縣慣性: ______ 手機(jī)機(jī)身內(nèi)存只有250k,最多也只能執(zhí)行200K以下的JAVA軟件,JAVA擴(kuò)展所運(yùn)行的軟件空間大小是由手機(jī)的系統(tǒng)平臺(tái)與硬件共同決定的,是無(wú)法改變的.
清澗縣慣性: ______ 股票技術(shù)指標(biāo): 一、隨機(jī)指標(biāo)KDJ ① K值由右邊向下交叉D值做賣(mài),K值由右邊向上交叉D值做買(mǎi).高檔連續(xù)二次向下交叉確認(rèn)跌勢(shì)(死叉),低檔高檔連續(xù)二次向下交叉確認(rèn)跌勢(shì),低檔連續(xù)二次向上交叉確認(rèn)漲勢(shì)(金叉). ② D值<15% 超...
清澗縣慣性: ______ 對(duì)的,2630本來(lái)就不能下載大于250的軟件,把后綴改有MP3就可以下載了.還有個(gè)辦法,叫一些能傳軟件的朋友的手機(jī)下載,然后藍(lán)牙傳給你,每個(gè)辦法都麻煩 .
清澗縣慣性: ______ 軟件需要的內(nèi)存一般比軟件本身大,比如下一個(gè)軟件需要250多K,但將它安裝上并且使用的時(shí)候很可能需要800K左右,手機(jī)剩下的內(nèi)存有點(diǎn)小了,建議刪除部分文件后再試.
清澗縣慣性: ______ 缺音響,不過(guò)這都不是事.你的配置已經(jīng)比較完美了,但是還需要小改一下,760K+7770,這是現(xiàn)階段最具性?xún)r(jià)比又兼顧性能的配置,CPU換760K...
清澗縣慣性: ______ a500/2此,因?yàn)槭褂?分查找,所以從中間開(kāi)始查找,假設(shè)從250開(kāi)始找,首先比較250大于K還是小于K,如果大于則從250往后找至500如果小于250,則往前找.所以一分為2,那么最多也就是a500/2次了
清澗縣慣性: ______ 使用內(nèi)儲(chǔ)卡或換手機(jī)