Проблема с Global Variables
- Войдите на сайт для отправки комментариев
Пнд, 15/06/2015 - 19:50
Я решил управлять телевизором Samsung с Arduino UNO R3.
Прочитал на Хабре, что на самсунги нужно посылать коды RAW.
Компиляция с ошибками. Говрит "Global variables use 2 115 bytes (103%) of dynamic memory, leaving -67 bytes for local variables. Maximum is 2 048 bytes.", а в конце "Not enough memory; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing your footprint.".
Вот код:
#include <IRremote.h>
IRsend irsend;
unsigned long a;
void setup() {
Serial.begin(9600);
Serial.setTimeout(4);
pinMode(3, OUTPUT);
}
unsigned int one[78]={4450,4550,400,1800,450,650,450,1800,450,600,500,650,450,650,450,700,450,650,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,700,450,650,450,650,450,1750,450,650,500,650,450,650,500,650,450,650,450,1750,450,1750,500,650,450,1700,500,1750,450,1750,450,1800,450,1700,450};
unsigned int two[78]={4450,4550,450,1750,450,650,500,1750,500,600,450,650,450,650,500,650,450,650,500,1700,500,650,450,1800,450,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,1750,450,650,450,650,450,700,450,650,450,650,450,700,450,1750,450,650,450,1700,500,1750,500,1750,450,1750,500,1650,500};
unsigned int three[78]={4450,4500,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,1750,500,1750,450,650,450,650,500,650,450,650,450,650,450,1750,500,650,450,650,500,1700,450,1800,450,1700,500,1750,500,1650,500};
unsigned int four[78]={4450,4550,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1700,500,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,650,500,650,450,1700,500,600,500,650,450,650,500,600,500,1750,450,1750,500,1750,450,600,500,1750,500,1700,500,1750,500,1650,500};
unsigned int five[78]={4450,4550,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,650,450,1700,500,650,450,650,450,650,450,700,450,650,450,1750,500,1750,450,650,450,1750,500,1750,450,1750,500,1650,500};
unsigned int six[78]={4400,4550,450,1800,400,700,400,1800,450,650,450,700,400,700,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,700,400,700,450,650,450,1750,500,650,450,1700,500,650,450,650,450,700,400,700,450,1750,450,650,450,1800,450,650,450,1750,500,1750,450,1750,450,1700,500};
unsigned int seven[78]={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,500,600,500,1750,500,600,500,600,500,650,450,650,500,600,500,650,450,650,500,1750,450,1700,500,600,500,650,450,650,450,650,500,1750,450,1750,500,600,500,650,450,1700,550,1700,500,1750,450,1700,500};
unsigned int eight[78]={4400,4550,450,1750,450,650,450,1800,450,650,450,650,450,700,400,650,500,650,450,1750,450,700,450,1750,500,600,450,700,450,650,450,650,450,700,450,1750,450,650,450,1800,450,1700,500,650,450,650,450,700,450,600,500,650,450,1750,500,650,450,650,450,1750,450,1800,400,1800,450,1700,450};
unsigned int nine[78]={4450,4500,450,1750,500,650,450,1800,450,600,450,650,500,650,450,650,450,700,450,1750,450,650,450,1800,450,650,450,650,450,650,500,600,500,650,450,650,500,1750,450,1750,500,1700,450,650,500,650,450,650,450,650,450,1800,450,650,450,650,450,650,450,1800,450,1750,450,1750,500,1650,500};
unsigned int zero[78]={4450,4500,500,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,450,650,500,1750,500,600,450,650,500,650,450,650,450,650,500,1750,450,650,450,650,500,650,450,1750,450,650,450,650,500,650,450,650,450,1750,500,1750,450,1750,450,650,450,1750,500,1750,450,1700,450};
unsigned int on[78]={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,450,700,450,650,450,1750,450,700,450,1750,500,600,450,650,500,650,450,650,450,700,450,650,450,1750,450,650,450,700,450,650,450,650,500,650,450,650,450,1750,450,700,450,1750,450,1750,400,1800,450,1800,400,1800,450,1700,450};
void S1() {irsend.sendRaw(one,78,38);delay(500);}
void S2() {irsend.sendRaw(two,78,38);delay(500);}
void S3() {irsend.sendRaw(three,78,38);delay(500);}
void S4() {irsend.sendRaw(four,78,38);delay(500);}
void S5() {irsend.sendRaw(five,78,38);delay(500);}
void S6() {irsend.sendRaw(six,78,38);delay(500);}
void S7() {irsend.sendRaw(seven,78,38);delay(500);}
void S8() {irsend.sendRaw(eight,78,38);delay(500);}
void S9() {irsend.sendRaw(nine,78,38);delay(500);}
void S0() {irsend.sendRaw(zero,78,38);delay(500);}
void Son() {irsend.sendRaw(on,78,38);delay(500);}
void loop()
{ a = Serial.parseInt();
if (a==101) {Son ();}
if (a==1) {S1();}
if (a==2) {S2();}
if (a==3) {S3();}
if (a==4) {S4();}
if (a==5) {S5();}
if (a==6) {S6();}
if (a==7) {S7();}
if (a==8) {S8();}
if (a==9) {S9();}
if (a==10) {S1();S0();}
И что вам не понятно из сообщения компилятора?
http://www.arduino.cc/en/Reference/PROGMEM
И что вам не понятно из сообщения компилятора?
http://www.arduino.cc/en/Reference/PROGMEM
Спасибо, почитаю
Arduino IDE зависает на этапе компиляции(
Вот текущее состояние кода:
#include <IRremote.h> #include <avr/pgmspace.h> //const PROGMEM uint16_t variableName[] = {}; IRsend irsend; unsigned long a; void setup() { Serial.begin(9600); Serial.setTimeout(4); pinMode(3, OUTPUT); } const PROGMEM uint16_t one[78]={4450,4550,400,1800,450,650,450,1800,450,600,500,650,450,650,450,700,450,650,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,700,450,650,450,650,450,1750,450,650,500,650,450,650,500,650,450,650,450,1750,450,1750,500,650,450,1700,500,1750,450,1750,450,1800,450,1700,450}; const PROGMEM uint16_t two[78]={4450,4550,450,1750,450,650,500,1750,500,600,450,650,450,650,500,650,450,650,500,1700,500,650,450,1800,450,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,1750,450,650,450,650,450,700,450,650,450,650,450,700,450,1750,450,650,450,1700,500,1750,500,1750,450,1750,500,1650,500}; const PROGMEM uint16_t three[78]={4450,4500,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,1750,500,1750,450,650,450,650,500,650,450,650,450,650,450,1750,500,650,450,650,500,1700,450,1800,450,1700,500,1750,500,1650,500}; const PROGMEM uint16_t four[78]={4450,4550,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1700,500,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,650,500,650,450,1700,500,600,500,650,450,650,500,600,500,1750,450,1750,500,1750,450,600,500,1750,500,1700,500,1750,500,1650,500}; const PROGMEM uint16_t five[78]={4450,4550,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,650,450,1700,500,650,450,650,450,650,450,700,450,650,450,1750,500,1750,450,650,450,1750,500,1750,450,1750,500,1650,500}; const PROGMEM uint16_t six[78]={4400,4550,450,1800,400,700,400,1800,450,650,450,700,400,700,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,700,400,700,450,650,450,1750,500,650,450,1700,500,650,450,650,450,700,400,700,450,1750,450,650,450,1800,450,650,450,1750,500,1750,450,1750,450,1700,500}; const PROGMEM uint16_t seven[78]={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,500,600,500,1750,500,600,500,600,500,650,450,650,500,600,500,650,450,650,500,1750,450,1700,500,600,500,650,450,650,450,650,500,1750,450,1750,500,600,500,650,450,1700,550,1700,500,1750,450,1700,500}; const PROGMEM uint16_t eight[78]={4400,4550,450,1750,450,650,450,1800,450,650,450,650,450,700,400,650,500,650,450,1750,450,700,450,1750,500,600,450,700,450,650,450,650,450,700,450,1750,450,650,450,1800,450,1700,500,650,450,650,450,700,450,600,500,650,450,1750,500,650,450,650,450,1750,450,1800,400,1800,450,1700,450}; const PROGMEM uint16_t nine[78]={4450,4500,450,1750,500,650,450,1800,450,600,450,650,500,650,450,650,450,700,450,1750,450,650,450,1800,450,650,450,650,450,650,500,600,500,650,450,650,500,1750,450,1750,500,1700,450,650,500,650,450,650,450,650,450,1800,450,650,450,650,450,650,450,1800,450,1750,450,1750,500,1650,500}; const PROGMEM uint16_t zero[78]={4450,4500,500,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,450,650,500,1750,500,600,450,650,500,650,450,650,450,650,500,1750,450,650,450,650,500,650,450,1750,450,650,450,650,500,650,450,650,450,1750,500,1750,450,1750,450,650,450,1750,500,1750,450,1700,450}; const PROGMEM uint16_t on[78]={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,450,700,450,650,450,1750,450,700,450,1750,500,600,450,650,500,650,450,650,450,700,450,650,450,1750,450,650,450,700,450,650,450,650,500,650,450,650,450,1750,450,700,450,1750,450,1750,400,1800,450,1800,400,1800,450,1700,450}; void S1() {irsend.sendRaw(one,78,38);delay(500);} void S2() {irsend.sendRaw(two,78,38);delay(500);} void S3() {irsend.sendRaw(three,78,38);delay(500);} void S4() {irsend.sendRaw(four,78,38);delay(500);} void S5() {irsend.sendRaw(five,78,38);delay(500);} void S6() {irsend.sendRaw(six,78,38);delay(500);} void S7() {irsend.sendRaw(seven,78,38);delay(500);} void S8() {irsend.sendRaw(eight,78,38);delay(500);} void S9() {irsend.sendRaw(nine,78,38);delay(500);} void S0() {irsend.sendRaw(zero,78,38);delay(500);} void Son() {irsend.sendRaw(on,78,38);delay(500);} void loop() { a = Serial.parseInt(); if (a==101) {Son ();} if (a==1) {S1();} if (a==2) {S2();} if (a==3) {S3();} if (a==4) {S4();} if (a==5) {S5();} if (a==6) {S6();} if (a==7) {S7();} if (a==8) {S8();} if (a==9) {S9();} if (a==10) {S1();S0();}И что вам не понятно из сообщения компилятора?
http://www.arduino.cc/en/Reference/PROGMEM
Спасибо, почитаю
Почитайте еще.
Похоже, всё исправил, НО этот код тоже вызывает зависание IDE((
#include <IRremote.h> #include <avr/pgmspace.h> //const unsigned int variableName[] PROGMEM= {}; IRsend irsend; unsigned long a; void setup() { Serial.begin(9600); Serial.setTimeout(4); pinMode(3, OUTPUT); } const unsigned int one[78] PROGMEM={4450,4550,400,1800,450,650,450,1800,450,600,500,650,450,650,450,700,450,650,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,700,450,650,450,650,450,1750,450,650,500,650,450,650,500,650,450,650,450,1750,450,1750,500,650,450,1700,500,1750,450,1750,450,1800,450,1700,450}; const unsigned int two[78] PROGMEM={4450,4550,450,1750,450,650,500,1750,500,600,450,650,450,650,500,650,450,650,500,1700,500,650,450,1800,450,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,1750,450,650,450,650,450,700,450,650,450,650,450,700,450,1750,450,650,450,1700,500,1750,500,1750,450,1750,500,1650,500}; const unsigned int three[78] PROGMEM={4450,4500,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,1750,500,1750,450,650,450,650,500,650,450,650,450,650,450,1750,500,650,450,650,500,1700,450,1800,450,1700,500,1750,500,1650,500}; const unsigned int four[78] PROGMEM={4450,4550,450,1750,450,700,450,1750,450,650,450,650,500,650,450,650,450,650,500,1700,500,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,650,450,650,500,650,450,1700,500,600,500,650,450,650,500,600,500,1750,450,1750,500,1750,450,600,500,1750,500,1700,500,1750,500,1650,500}; const unsigned int five[78] PROGMEM={4450,4550,450,1750,450,650,500,1750,450,650,450,650,500,650,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,650,500,650,450,1750,450,650,500,650,450,1700,500,650,450,650,450,650,450,700,450,650,450,1750,500,1750,450,650,450,1750,500,1750,450,1750,500,1650,500}; const unsigned int six[78] PROGMEM={4400,4550,450,1800,400,700,400,1800,450,650,450,700,400,700,450,650,450,650,500,1750,450,650,450,1750,500,600,500,650,450,650,450,700,400,700,450,650,450,1750,500,650,450,1700,500,650,450,650,450,700,400,700,450,1750,450,650,450,1800,450,650,450,1750,500,1750,450,1750,450,1700,500}; const unsigned int seven[78] PROGMEM={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,500,600,500,1750,500,600,500,600,500,650,450,650,500,600,500,650,450,650,500,1750,450,1700,500,600,500,650,450,650,450,650,500,1750,450,1750,500,600,500,650,450,1700,550,1700,500,1750,450,1700,500}; const unsigned int eight[78] PROGMEM={4400,4550,450,1750,450,650,450,1800,450,650,450,650,450,700,400,650,500,650,450,1750,450,700,450,1750,500,600,450,700,450,650,450,650,450,700,450,1750,450,650,450,1800,450,1700,500,650,450,650,450,700,450,600,500,650,450,1750,500,650,450,650,450,1750,450,1800,400,1800,450,1700,450}; const unsigned int nine[78] PROGMEM={4450,4500,450,1750,500,650,450,1800,450,600,450,650,500,650,450,650,450,700,450,1750,450,650,450,1800,450,650,450,650,450,650,500,600,500,650,450,650,500,1750,450,1750,500,1700,450,650,500,650,450,650,450,650,450,1800,450,650,450,650,450,650,450,1800,450,1750,450,1750,500,1650,500}; const unsigned int zero[78] PROGMEM={4450,4500,500,1750,450,650,450,1800,450,650,450,650,450,650,500,650,450,650,450,1750,450,650,500,1750,500,600,450,650,500,650,450,650,450,650,500,1750,450,650,450,650,500,650,450,1750,450,650,450,650,500,650,450,650,450,1750,500,1750,450,1750,450,650,450,1750,500,1750,450,1700,450}; const unsigned int on[78] PROGMEM={4450,4550,450,1750,450,650,450,1800,450,650,450,650,450,650,450,700,450,650,450,1750,450,700,450,1750,500,600,450,650,500,650,450,650,450,700,450,650,450,1750,450,650,450,700,450,650,450,650,500,650,450,650,450,1750,450,700,450,1750,450,1750,400,1800,450,1800,400,1800,450,1700,450}; void S1() {irsend.sendRaw(one,78,38);delay(500);} void S2() {irsend.sendRaw(two,78,38);delay(500);} void S3() {irsend.sendRaw(three,78,38);delay(500);} void S4() {irsend.sendRaw(four,78,38);delay(500);} void S5() {irsend.sendRaw(five,78,38);delay(500);} void S6() {irsend.sendRaw(six,78,38);delay(500);} void S7() {irsend.sendRaw(seven,78,38);delay(500);} void S8() {irsend.sendRaw(eight,78,38);delay(500);} void S9() {irsend.sendRaw(nine,78,38);delay(500);} void S0() {irsend.sendRaw(zero,78,38);delay(500);} void Son() {irsend.sendRaw(on,78,38);delay(500);} void loop() { a = Serial.parseInt(); if (a==101) {Son ();} if (a==1) {S1();} if (a==2) {S2();} if (a==3) {S3();} if (a==4) {S4();} if (a==5) {S5();} if (a==6) {S6();} if (a==7) {S7();} if (a==8) {S8();} if (a==9) {S9();} if (a==10) {S1();S0();}Еще раз читайте, до конца, особенно ту часть где показывают как читать байты.
Еще раз читайте, до конца, особенно ту часть где показывают как читать байты.
Байты ? Ведь unsigned int - два байта.
"#include <avr/pgmspace.h>
// save some unsigned ints PROGMEM prog_uint16_t charSet[] = { 65000, 32796, 16843, 10, 11234}; unsigned int displayInt; int k = 0; // counter variable // read back a 2-byte int displayInt = pgm_read_word_near(charSet + k)"Еще раз читайте, до конца, особенно ту часть где показывают как читать байты.
Байты ? Ведь unsigned int - два байта.
"#include <avr/pgmspace.h>
// save some unsigned ints PROGMEM prog_uint16_t charSet[] = { 65000, 32796, 16843, 10, 11234}; unsigned int displayInt; int k = 0; // counter variable // read back a 2-byte int displayInt = pgm_read_word_near(charSet + k)"UDP: Да без разницы что читать, не хочет ТС правильно читать данные из флэша.