Robofun 機器人論壇

標題: progmem的問題 [打印本頁]

作者: cba456567    時間: 2017-4-24 15:45
標題: progmem的問題
能否把這段用成陣列

static unsigned int one[71]   = {232, 888, 232, 2244, 220, 756, 228, 2788, 232, 1292, 224, 1300, 224, 1432, 232, 1836, 224, 14268, 228, 888, 284, 2596, 224, 756, 228, 748, 232, 748, 224, 888, 232, 748, 224, 752, 232, 15412, 228, 888, 232, 2244, 224, 752, 232, 2788, 232, 1288, 228, 1296, 228, 1428, 232, 1836, 224, 14268, 232, 884, 220, 1572, 228, 1840, 228, 752, 220, 756, 228, 884, 224, 756, 228, 748, 232};  

但必須保留static的部分 也不行用const static
這樣好像紅外線發射出去時是無效的
作者: 超新手    時間: 2017-4-24 17:47
本帖最後由 超新手 於 2017-4-25 08:02 編輯

如果這個 static unsigned int one[71]   不叫陣列,那什麼叫做陣列?
作者: cba456567    時間: 2017-4-25 15:57
我想使用progmem
作者: 超新手    時間: 2017-4-25 17:47
只能 const static PROGMEM  unsigned int one[71]   =
READ 時, 一定要用, pgm_read_word_near...去讀, 否則會錯
只是好奇, 為什麼一定要用 PROGMEM
如果用
const  static unsigned int one[71]  = {....};
或是
static unsigned int one[71]  = {....};
效果應該差不多, 而且限制較少
作者: cba456567    時間: 2017-4-25 18:03
sram不夠
有試過const static了  紅外線沒有發射出去

我想做的是
http://smallbeetw.blogspot.tw/search/label/%E5%87%B1%E6%93%98
這篇文章的程式

作者: 超新手    時間: 2017-4-26 08:45
本帖最後由 超新手 於 2017-4-26 08:46 編輯

我試過了, 不管有沒有加 static, const, 都有輸出, 沒問題!
你是指, "不加 const 就有輸出, 但加了 const 就沒輸出嗎?"
還是你量錯腳?
因為每個機種的輸出並不相同, 像 UNO 是 3, MEGA 是 9....

#include <IRremote.h>
IRsend irsend;
const unsigned int sendRawCodes[71]={...};
void setup() {
  Serial.begin(9600);
}
void loop() {
  irsend.sendRaw(sendRawCodes,71,38);
  Serial.println("Sent raw");
  delay(500);
}
作者: cba456567    時間: 2017-4-26 12:02
const unsigned int sendRawCodes[71]={...};這段還要加上PROGMEM
不然SRAM會不夠用
但加了之後 其他紅外線發射出去有電視都有收到
但不知道為甚麼發射到機上盒的紅外線就都沒反應
作者: 超新手    時間: 2017-4-26 12:16
本帖最後由 超新手 於 2017-4-26 14:09 編輯

只要宣告成 CONST 的陣列, 就不會用到 SRAM
const unsigned int sendRawCodes[71]


如果要用 PROGMEM 也可以. 只是沒必要
而且你程式要改, 必須要呼叫 pgm_read_word_near 之類的程式去讀值
不可直接用原來程式
而且使用時, 還是要用 SRAM 去接





歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2