Технический форум по робототехнике.
executer » 20 июл 2009, 14:58
Вот вырезка из кода, при компиляции четырехэтажно ругается на строку с malloc:
- Код: Выделить всё • Развернуть
char *EditText;
EditText=malloc(30);
sprintf(EditText,"Бла-бла-бла");
Может еще както можно? Если да, то хотелось бы всетаки и malloc научится пользовать.
Какие еще варианты для создания стринговой переменной?
В скриптах для ПК использовал следующее:
- Код: Выделить всё • Развернуть
char *temp;
temp=malloc(15);
sprintf(temp,"Station%i",num);
Думал и тут прокатит.

Сергей » 20 июл 2009, 15:12
А чем не устроит простой буффер? Сделай буффер на 64 символа, записывай туда и ноль в конце..
malloc очень замедляет работу МК
blindman » 20 июл 2009, 15:21
Какой контроллер? Компилятор?
В общем и целом, есть мнение, что динамическое выделение памяти в встраиваемых системах - зло
Сергей » 20 июл 2009, 15:26
не зло если есть специальный контроллер памяти. Но для таких маленьких контроллеров - нет смысла работать с динамической памятью, тк ее там очень мало и фрагментация может сильно сказаться. Советую забыть о malloc для МК ниже ARM9.
executer » 20 июл 2009, 15:30
Понятно, думал что так праильнее... Контроллер Мега32. Компилятор Вин... чивото там.
2Сергей. Т.е. следующим образом?
- Код: Выделить всё • Развернуть
char EditText[]={0,0,0,0,0,0,0,0,0,0,0,0....};
sprintf(EditText,"Бла-бла-бла");
Такая конструкция должна работать?
(Помнится мучался так на ПК пока malloc не начал пользовать).
Сергей » 20 июл 2009, 16:06
- Код: Выделить всё • Развернуть
char buffer[64];
memset( buffer, 0, sizeof( buffer ) );
sprintf( buffer, "My const char string" );
executer » 20 июл 2009, 17:06
Благодарю. Вечером попробую, и что такое memset почитаю )
executer » 21 июл 2009, 00:10
ну вот, таже проблема что и на ПК была - выводит на экранчик всякий мусор (
Сергей » 21 июл 2009, 00:27
Вот тебе пример
- Код: Выделить всё • Развернуть
#include <stdio.h>
int main ()
{
char buffer[128]; // задаем размер буффера
memset( buffer, 0, sizeof( buffer ) ); // обнуляем весь массив, чтобы там не было мусора. На всякий.
int n = 0; // всегда нужно инициализировать переменные
int a = 5;
int b = 3;
...
n = sprintf( buffer, "%d plus %d is %d", a, b, a+b ); // n - это количество символов в получившейся строке
uart_write( buffer, n ); // выводим в uart n символов из buffer
// где метод uart_writе, в данном случае, имеет входные параметры: указатель на буффер и количество
// символов для записи
...
}
executer » 21 июл 2009, 00:46
Вот блин. Оказуется все работало. И malloc и memset - я функции что на экранчик печатает забыл указать что строка в ОЗУ а не в ПЗУ находится.
(библиотечка glcd)
Дико извиняюсь.
