1

表示されているエラーを正確に説明する方法がわかりません。main() でポート レジスタを設定すると、すべてが意図したとおりに機能します。ただし、関数で実行しようとすると、プログラムが停止します。

main.c:

__attribute__((OS_main)) int main(void);
int main(void) {                                           
    DDRD = 0xF0;
    PORTD = 0xF0;
    led( LED_GREEN, true );
    while( true );
}

これにより、緑色の LED が点灯します。ただし、ポート設定を別の機能に移動すると、次のように何も起こりません。

__attribute__((OS_main)) int main(void);
int main(void) {                                           
    hwInit();  
    led( LED_GREEN, true );
    while( true );
}

コメントアウトすると、2番目の例が期待どおりに機能するため、原因は属性行のようです。私の問題は、その理由を理解することです.OS_main属性は、関数の入口または出口でレジスタを格納してはならないことをコンパイラに伝えるだけであるためです。これは正しくありませんか?

4

1 に答える 1