[英]Execute class method or function(static method) on main thread from another thread C/C++
[英]Arduino: static StringObject in class' method and main function
我有一個使用main
功能而不是setup
和loop
AVR現有程序。 這似乎是必需的,因為它使用了計時器,當我用setup
和loop
手動替換它時,它不起作用。
這工作正常,但我想從庫中包含一些代碼,現在編譯器抱怨main
多個定義。 這很奇怪,因為實際上沒有包含任何東西,而且我聲明了自己的main
(因此沒有偷偷摸摸的默認main
函數),並且我已經隔離到以下情況:
int main()
{
}
// Foo.h
class Foo
{
void bar();
};
// Foo.cpp
void Foo::bar()
{
/* remove static here */
static String foo;
}
一旦在bar
方法中聲明String
foo
,編譯器便開始抱怨。 但僅當它聲明為static
。 否則,代碼將編譯。
我不是cpp
,無法弄清楚為什么在方法內部聲明靜態變量會觸發此事件。
WString.h
嗎?),( WString.h
String
WString.h
),這不會發生。 WString
沒有任何變化。 我的理解(忽略模板類)是foo
的單個副本; 因此,我可以全局聲明它,也可以將其聲明為該類的成員變量(后者在技術上有所不同,但此類永遠只有一個實例)。
我得到的錯誤:
// previous stages succeed ... Linking everything together... "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "/path/to/build/static_in_cpp_method.ino.elf" "/path/to/build/sketch/static_in_cpp_method.ino.cpp.o" "/path/to/build/../arduino_cache_993247/core/core_arduino_avr_pro_cpu_16MHzatmega328_51f02b7210b938436b779d1c032618e1.a" "-L/path/to/build" -lm main.cpp.o (symbol from plugin): In function `atexit': (.text+0x0): multiple definition of `main' /path/to/build/sketch/static_in_cpp_method.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2: error: ld returned 1 exit status exit status 1 Error compiling for board Arduino Pro or Pro Mini.
您不應該定義自己的main()
函數。
添加void loop()
和void setup()
函數
您要放置在main()
函數中的代碼應分為兩部分:
setup()
, loop()
函數。 使用或不使用static
關鍵字,您的代碼都可以愉快地編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.