私はAtmel AVR Microcontrollerに独自のブートローダを書き込もうとしていました。私はgithubからコードベースの1つを参照しました。コードベースについてZEVERO((void(*)(void))0)()はExit関数ですか?
私はコードベースを理解しています。しかし、ライン224で私は、コードライタがに説明を与えている
**((void(*)(void))0)();**
すなわち、私はもし条件部を理解するが、私は真の文の一部を理解しようとしていたときに、ライン Reference to the code
**if (pgm_read_word(0) != 0xFFFF) ((void(*)(void))0)(); //EXIT BOOTLOADER**
を見つけましたこれは// EXIT BOOTLOADER
私の最初の質問は、この複合宣言の意味は何ですか。 **((void(*)(void))0)();**
2番目の質問は、マイクロコントローラでコードの実行を終了しますか?
いいえ(直接終了コードではありません)。クラッシュするか、そうでなければアドレス0(コードを再起動するかもしれない)でコードを実行するでしょう。定義されていない動作なので、定義された動作を与えるコンテキストがない限り悪いです。 –
プラットフォームの場合、このコードは書かれているかもしれませんが、コードをリセットするかもしれません。しかし、これは決してポータブルではありません。常に標準の['exit'](https://www.tutorialspoint.com/c_standard_library/c_function_exit.htm)機能を使用してください。 –