eCos中的main函式

2021-09-30 10:38:57 字數 1970 閱讀 2945

mingdu.zheng gmail com

ecos提供了標準的main函式支援,這給程式移植提供了便利,函式原型

int main(int argc, char* ar**);
輸入引數通過cygdat_libc_arguments選項定義,該選項位於

iso c library

iso environment startup/termination

arguments to main()

ecos可以通過三種方式呼叫main函式。

iso c library

iso environment startup/termination

startup context for main()

invoked as ecos thread ==> true

這是包含kernel元件時的預設配置。這種配置下,ecos將在初始化過程建立乙個執行緒,該執行緒的入口函式為cyg_libc_invoke_main,cyg_libc_invoke_main負責為main函式準備命令列引數,即main函式的argc和ar**引數,然後呼叫main函式,並在main函式退出後呼叫phtread_exit或exit函式執行清理工作。

使用這種配置,編寫ecos應用就像在linux上編寫多執行緒應用一樣,首先進入的是main函式,在main函式中建立其它執行緒,同時main也作為多執行緒之一繼續執行。

如果應用沒有提供main函式,那麼將鏈結到c庫提供的預設main函式,該預設實現除了將main執行緒掛起不做其它任何事。

iso c library

iso environment startup/termination

startup context for main()

invoked from initialization context ==> true

這是不包含kernel元件時的預設配置。這種配置下,c庫將重定義cyg_user_start函式,並覆蓋infra提供的cyg_user_start函式,在c庫重定義的cyg_user_start中呼叫cyg_libc_invoke_main來呼叫main函式。

這種方式適合沒有包括kernel的情況,在沒有kernel的情況下,使用者可以不用定義cyg_user_start函式,而是定義main函式。c庫定義的cyg_user_start函式是弱函式,因此如果使用者仍然定義cyg_user_start函式,那麼c庫的cyg_user_start函式將被使用者定義函式覆蓋,即使定義了main函式也不會被呼叫執行,但是使用者可以自行呼叫cyg_libc_invoke_main來呼叫main函式。

iso c library

iso environment startup/termination

startup context for main()

invoked elsewhere ==> true

這種配置下,ecos將不會呼叫main函式,如果有需要應用程式可以自行呼叫cyg_libc_invoke_main來建立main執行環境、呼叫main,使用cyg_libc_invoke_main呼叫main函式所引用的ar**是在ecos配置的過程中決定的不能在執行時修改,假如應用程式需要可以修改mian函式引用的ar**,那麼可以自行實現cyg_libc_invoke_main函式(但是不能命名為cyg_libc_invoke_main,cyg_libc_invoke_main不是弱符號),在為main準備ar**引數時動態讀取建立ar**所指向的內容,例如可以將入口引數儲存到eeprom且支援使用者修改入口引數,在系統初始化時讀取eeprom的內容並轉化成有效的ar**引數傳遞給main函式。

引數ecos源**packages/language/c/libc/startup//src/cstartup.exx, invokemain,cxx, mainthread.cxx, main.cxx。

原文見:

C 中的main函式

1 乙個程式可以包含乙個或者多個函式,但只能必須有乙個命名的main函式 2 main函式是唯一被作業系統顯式呼叫的函式 3 main函式的返回型別必須為int型,返回0值表示執行成功,返回其他值表明有錯誤 出現,每個作業系統的具體返回內容不一樣 4 c 容許主函式main 有或者沒有引數列表,如果...

python中的main函式

python是一種解釋型指令碼語言,和c c 語言不同,c c 程式從main函式開始執行,python程式從開始到結尾順序執行。先總結下python中的main函式的作用 讓模組 函式 可以自己單獨執行 除錯 相當於構造了呼叫其它函式的入口,這就類似於c c 裡面的main函式了。一方面 我們想要...

C 中main函式的引數

眾所周知,每乙個可執行檔案對應的源程式必定有乙個main 函式,而在命令列介面中輸入的引數就是通過main 函式的引數進行傳入的。在很多c 程式設計當中,我們設計的main 函式既沒有輸入引數,也沒有返回值,但實際上,main 函式與其他函式一樣,可以有引數和返回值的。main 函式可以有兩個形式引...