私の質問は、STM8 マイクロコントローラーが物事に対処する方法に関係しています。多分私は何かが欠けている、私は問題が存在する小さなプログラムを書きました。奇妙なことに、私のコンピューターと stm8 MCU では違います。
#include <stdio.h>
#define START_ADDRESS *(unsigned char*)0x1001
void printAddress(unsigned char * address){
printf("The address inside the function: %p\n",address);
}
int main()
{
printf("The address outside function: %p\n",&START_ADDRESS);
printAddress(&START_ADDRESS);
return 0;
}
私のコンピューターでのこの関数の出力は、予想どおりアドレスが一致しています。
出力:
関数外アドレス:0x1001
関数内のアドレス: 0x1001
STM8 MCU での出力:
関数外アドレス:0x0110
関数内のアドレス: 0x0110
だから私の質問は、なぜこれを行うのか、どこで起こっているのか、START_ADDRESS レジスタに書き込むと 0x1001 または 0x0110 に書き込むのかということです。両方のシステムの printf がわずかに異なるだけかもしれません。