編集: 問題の解決策は、プロトタイプの欠落でした。
呼び出しuint8_t foo(uint16_t bar)
てその戻り値を a に割り当てるとuint32_t temp
、LSB だけでなく、temp
それ以上の値が上書きされます。これはどのように可能ですか?コンパイラはGCCです。
呼び出しコード:
uint32_t temp = 0xAAAAAAAA;
printf("[%x]\n", temp);
temp = foo(me->bar);
printf("[%x]\n", temp);
出力:
[aaaaaaaa]
[4081ff]
ここでは、foo の実装の関連部分を示します。
typedef struct CMOCK_foo_CALL_INSTANCE_tag
{
UNITY_LINE_TYPE LineNumber;
uint8_t ReturnVal;
int CallOrder;
uint16_t Expected_nGoNo;
} CMOCK_foo_CALL_INSTANCE;
uint8_t foo(uint16_t bar)
{
CMOCK_foo_CALL_INSTANCE* cmock_call_instance =
(CMOCK_foo_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.foo_CallInstance);
(...)
return cmock_call_instance->ReturnVal;
}