編輯:我現在明白髮生了什麼事。當我將一個字符(一個字節)添加到其中一個標籤(將「White Oyster Incubation」更改爲「White Oyster IncubationX」)時,我發現類和它的實例化在RAM中被複制, Arduino IDE告訴我,動態內存使用了2個字節,所以我假設一個是爲了課程,另一個是爲了instatiation。在編譯時存儲默認值的優雅和高效的方法?
原來,由於某種原因,來自String.h的字符串似乎一次分配2個字節,所以一個字符串的大小爲2,兩個字符串爲2,三個字符串爲3,等等。尺寸增加偶數。
當然,現在我意識到這個類被存儲在Arduino PROGMEM(EPROM)中,並且實例化在RAM中,所以數據並不真正在RAM中複製。
原始問題如下: 我正在製作Arduino(atmega328)的程序,其中蘑菇溫室將被控制。對於蘑菇發育的不同階段,應該存在多種溫度和溼度參數的概況。 我希望在編譯時保存這些配置文件,然後在配置文件之間進行Arduino更改,以便採取相應措施。 我想到了這一點:
class GrowingProfile
{
private:
int idealTemp;
int idealHumi;
String label;
public:
GrowingProfile(int idealTemp,int idealHumi, String label)
{
this->idealTemp = idealTemp;
this->idealHumi = idealHumi;
this->label = label;
};
//general methods
};
class mushroomSpecies1Profiles
{
public:
GrowingProfile incubationProfile;
GrowingProfile fruitingProfile;
WhiteOysterGrowingProfiles():
incubationProfile (100, 95, "White Oyster Incubation"),
fruitingProfile (20, 4, "White Oyster Fruiting"){}
};
,然後在主代碼,有mushroomSpecies1Profiles的實例,通過其成員作爲參數,以決定是否envioronment條件(在配置文件中設置)是好還是壞的方法。
但是,在我看來,這是臃腫的,因爲有效的數據是重複的,在類定義中,然後在實例化中。並且考慮到所討論的微控制器只有2K的內存...... 什麼是在最終的可執行文件中沒有重複數據的好方法?就好像它是C#中的靜態類一樣?
我沒有在這裏看到任何重複。 –
配置文件數量是否在編譯時固定?如果是這樣,你可以把名字放入一個枚舉中嗎?如果是這樣,你可以使用模板類。 – Corristo
你不應該濫用屬於某個命名空間的東西。 –