18.02.2013, 23:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от swat24
|
я подключал stdio.h там есть strtod() и strtol().
|
Я писал по поводу процитированного фрагмента:
Сообщение от swat24
|
по sprintf не получилось, уходит в hardfault.
|
Дело в том, что в stdio.h лишь объявления функции, а не их код, поэтому вариации, о которых я писал, осуществляются уже при линковке. Не знаю, как это выглядит в Атоллике (да и есть ли оно там), но скажем в IAR'е есть опции проекта (Project options/Library options/(Printf formatter|Scanf formatter)), указывающие вариант прилинковываемых функций форматного ввода вывода, на уровне линковки они работают переназначением имен _formatted_write* / _formatted_read*.
Сообщение от swat24
|
... как перевести из числа в текст? из того же инт, флоат...
|
Если нет потребности сложных форматных строках, но есть ограничения по объему кода, то я обычно пользуюсь своими функциями, вроде тех, что приведены выше, в противном случае - библиотечными.
__________________
There's always more than one way to skin a cat.
|
|
|
|
19.02.2013, 00:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Boba_spb
|
И параметр по ссылке введен в C++, а в С его нет.
|
Что-то я не разглядел в том коде параметров по ссылке - ???
__________________
There's always more than one way to skin a cat.
|
|
|
|
19.02.2013, 00:06
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
nerozero, ага, в книгах и в документации по С для пк я это видел, находится в
#include ‹stdio.h›
#include ‹stdlib.h›
Но там такого нет...
Написано, что можно использовать такое:
Код:
|
sprintf(str,"%d",value) converts to decimal base.
sprintf(str,"%x",value) converts to hexadecimal base.
sprintf(str,"%o",value) converts to octal base. |
Я сейчас пробую в кейле. Хочу, к примеру, на экран вывести температуру, которая имеет тип Float...
Последний раз редактировалось swat24; 19.02.2013 в 00:09.
|
|
|
|
19.02.2013, 00:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от swat24
|
Но как мне вывести к примеру числовое значение на экран? Если он принимает только строки...
|
Например, так.
Скажем, для примера с предыдущей страницы, выводите сначала строку "Temperature: ", затем две строки с целой и дробной частью и наконец - "°C":
Код:
|
puts("Temperature: ");
puts(Byte2Str(i/100));
puts(Byte2Str(i%100));
puts("°C"); |
__________________
There's always more than one way to skin a cat.
|
|
|
|
19.02.2013, 00:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Для кого то писал тут floaе в строку. Только точность где то окло 0.01 -
и диапазон от -999 до +999 - для температуры хватит.
PHP код:
|
void FloatToStr(char *tx,float a)
{
int i =*(int *)&a;
int p= (i››23)&255;
int m=( i & 0x7fffff )| 0x800000;
if(p==0)
{
*tx++='0';
*tx=0;
return;
}
if(i‹0)
{
*tx++='-';
}
p=p-127;
if(p›0)
{
m‹‹=p;
}
else
{
if(p‹0)
{
p=-p;
m››=p;
}
}
i=(m››23);
m= (m&0x7fffff)››12;
m*=125;
if(m&0x80)
{
m+=256;
}
m››=8;
*tx++='0'+i/100;
i%=100;
*tx++='0'+i/10;
*tx++='0'+i%10;
*tx++='.';
*tx++='0'+m/100;
m%=100;
*tx++='0'+m/10;
*tx++='0'+m%10;
*tx=0;
}
|
|
|
|
|
19.02.2013, 00:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Если проц не 32 битный. int на long поменяйте.
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
19.02.2013, 00:33
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
проц стм32ф4. Так что нормально. Сейчас пробую с sprintf.
Код:
|
int a=10;
char txt[10];
sprintf(txt,"%d",a); |
На это компилятор не ругается. Только при передаче параметров в подпрограмму вывода на экран ошибку пишет. Там тип uint8_t.
не помогло...
Сейчас попробую разобраться, что не так с ним...
|
|
|
|
19.02.2013, 00:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от swat24
|
|
Это для чего такое присвоение? И что за переменная, эта "txt"?
__________________
There's always more than one way to skin a cat.
|
|
|
|
19.02.2013, 00:43
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Скомпилировалось так:
Код:
|
int a=10;
char *txt[10];
sprintf(*txt,"%d",a);
GUI_Text(76,120,*txt,White,Green); |
Но при работе высвечивается на экране квадратик и все... еще и отладка не пашит с прошивкой через кейл... похоже не мой сегодня день ...
Кейл пишет Error:Flash Download failed - "Cortex - M4"...
С кейлом разобрался, все прошивает и отладка работает, но проблема с преобразованием осталась. Так при отладке еще и не могу просмотреть значения переменных... написано "out of scope"... ну ладно, завтра это гляну.
Спасибо за помощь
Последний раз редактировалось swat24; 19.02.2013 в 01:00.
|
|
|
|
19.02.2013, 11:15
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
sprintf(txt,"%d",a);
|
|
|
Сказали "Спасибо" SasaVitebsk
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:21.
|
|