Problems with vprintf, va_start, va_end

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Problems with vprintf, va_start, va_end

1,366 次查看
mark99
Contributor I

Hello

 

I have implemented a function to output debug messages to rs232 and/or sd-card (MC9S12XDP512):

 

void WriteMonitor(char *theString, ...)

{

  va_list theArguments;

  set_printf(PutChar);

  va_start(theArguments, theString);

  (void)vprintf(theString, theArguments);

  va_end(theArguments);

}

 

static void PutChar(char theChar)

{

  SciDriverSendChar(theChar);

}

 

Sometimes I'll get illegal characters on the debug result (special characters and more characters the expected).

 

Second problem: I'll get compiler warning C5917 (removed dead assignment) on the line 'va_end(theArguments)'.

 

Any hints?

 

Thanks a lot!

Marc

标签 (1)
0 项奖励
回复
2 回复数

911 次查看
kef
Specialist I
  • Sometimes I'll get illegal characters on the debug result (special characters and more
  • characters the expected).

Maybe you have baudrate mismatch? Also you should make sure you have enough stack space. 

 

  • Second problem: I'll get compiler warning C5917 (removed dead assignment) on the line 'va_end(theArguments)'.

va_end macro clears theArguments pointer. Of cause this assignment is not used in your code and thus is dead. You may disable compiler warning adding this line somewhere above the va_end line :

#pragma MESSAGE DISABLE C5917

0 项奖励
回复

911 次查看
mark99
Contributor I

Thank you for the answer!

 

It's no baudrate mismatch, because I have the same problem writing on a SD card. Unfortunately it's not a problem with stack space.

 

Very tricky...

0 项奖励
回复