2012-08-01 44 views
4

我的嵌入式系統工作重啓之後 - 不是Windows系統。靜態重新定義嵌入式系統C

我宣佈:

static uint_8 i = 0; 

所以我在開始時刻定義0。

的問題:後復位是我重新定義爲0或它獲得在RAM ADRESS垃圾信息?例如,我是否需要編寫一個init函數來將i重新定義爲0?

謝謝

回答

3

這取決於您的運行時庫(如果有的話)。如果您有一個現有的運行時庫,它可能會在啓動時將您的靜態數據初始化爲零(在main()之前)。但是,某些嵌入式系統可能沒有完整的運行時庫支持,因此您可能必須自己完成此操作。

+0

謝謝你讓我_not_看起來像個傻瓜!我問「我們有運行庫嗎?因爲靜態應該重新定義」 - 並且我們沒有我們的系統中沒有這個庫。所以現在我正在寫這個init函數! – Thomas 2012-08-01 08:09:15

+0

太棒了,聽起來很有趣。到過那裏! :) – 2012-08-01 08:12:30

0

不,你不必。當一個程序啓動時,所有的靜態變量保證被初始化爲0。

C標準ISO/IEC 9899:TC2定義此以下面的方式。對象
其標識符被聲明與外部或內部的鍵,或者與存儲類 說明符的靜態具有靜態存儲持續時間的對象的

6.2.4存儲持續時間。其壽命是該程序的 整個執行和其存儲的值初始化 只有一次,編程啓動之前。

+0

不要這麼說。 – Thomas 2012-08-01 08:10:34

+0

對,格雷格提出了一個很好的觀點。 – 2012-08-01 08:12:35