0

LPC2148にNEX Roboticsボードを使用しています。以下のコード行に非常に奇妙な問題があります。

//Prototypes
void diaplayInRow1WithPosition(unsigned char* data, unsigned char position);
void diaplayInRow2WithPosition(unsigned char* data, unsigned char position);
unsigned char convertHigherNibbleToASCIIValue(unsigned char data);
unsigned char convertLowerNibbleToASCIIValue(unsigned char data);
int main (void)
{
    unsigned char temp2;
    unsigned int PLLStatus;
    initializeAll();
    PLLStatus = PLL0STAT; 
    temp2 =   convertLowerNibbleToASCIIValue(PLLStatus);
    diaplayInRow1WithPosition(&temp2,15);
    temp2 = convertHigherNibbleToASCIIValue(PLLStatus);
    diaplayInRow1WithPosition(&temp2,14);
    temp2 = PLLStatus>>8;
    temp2 =   convertLowerNibbleToASCIIValue(PLLStatus);
    diaplayInRow1WithPosition(&temp2,13);
    return(0);
}

このコードを実行すると、何も表示されません。問題が最後の convertLowerNibbleToASCIIValue 関数呼び出しにあることに気付きました。次のようになっているはずです。

temp2 =   convertLowerNibbleToASCIIValue(temp2 );

しかし、この 1 行のエラーのために、ディスプレイ全体が空白になるのはなぜでしょうか? 最後の関数 diaplayInRow1WithPosition だけが問題を引き起こしたはずです。上記の行で変更した後でも、空白の表示になります。そのため、最後の convertLowerNibbleToASCIIValue を含む行を次のように置き換えました

temp2 =   convertLowerNibbleToASCIIValue(PLLStatus>>8);

そして、ついに正しい表示が得られました。

問題を消化できません。誰でも助けることができますか?私が必要とする主な答えは、1行に問題がある場合、前の行が正しく実行されないのはなぜですか? Keil コンパイラとコンパイラの依存関係を使用していますか? コンパイルエラーはありません。型などに問題があると、プログラム全体が壊れてしまうのでしょうか?

4

2 に答える 2

0

最後に、問題が Keil コンパイラにあることがわかりました。ダミー行を 1 つ追加すると (任意の割り当てステートメントである可能性があります)、コードが機能します!!! どこかで最適化が行われていますが、どこで行われているかはわかりません。とにかく、私は今回避策を持っています。機能しない場合はダミーを 1 つ追加し、不要な場合は削除します!!!

于 2015-04-22T19:10:34.213 に答える