2015-02-25 5 views
0

Я написал небольшую функцию для отладки цели, которая посылает строку в терминал через USB:Проблем с преобразованием Int обугливаться в C

void localprint(char* msg){ 
if(strlen(msg) > 60){ 
      usb_sendData(msg,60); 
} 
else usb_sendData(msg,strlen(msg)); 

} функция отлично работает для строк, как:

localprint(" I'm a test"), 

сообщение отображается на терминале. Теперь я хочу, чтобы получить adcValue, который является int на терминале, потому что я пробовал:

char t= (char)(((int)'0')+getADCValue(9)); // getting the ADC value of 0th channel 
localprint(&t); 

это doens't работа на всех, я также пытался:

char t= (char) getADCVAlue(9); 
localprint(&t); 

он тоже не работает. Поэтому мой вопрос - это любая идея, как я могу это сделать. Я использую uC STM32f10xx и ARM gcc. спасибо за любой намек

ответ

2

ничего не зная о диапазоне возможных Интс, что-то, как это будет работать:

char buffer[32]; 
sprintf(buffer, "%d", getADCVAlue(9)); 
localprint(buffer); 

Так как вы сделали 0+, я предполагаю, что это одна цифра, так что вы могли бы пойти

char buffer[2]; 
buffer[0] = '0' + getADCVAlue(9); 
buffer[1] = '\0'; 
localprint(buffer); 
+0

спасибо за ваш ответ, я попытался использовать, но я получаю только 0. Я изменил размер буфера, но это не помогло. sprintf дает мне ошибку undefined ссылку на '_sbrk ' – Engine

+0

и, кстати, ее 4 цифры – Engine

0

Ответ от John3136 будет работать нормально, если заменить sprintf с некоторой легкой реализации этого, например xsprintf от elm-chan, который я нашел очень полезным во встроенном программировании. Или вы должны иметь некоторые заглушки для системных вызовов, например _sbrk, если вы хотите использовать sprintf.

Я не могу прокомментировать решение от John3136, потому что у меня недостаточно репутации.

Смежные вопросы