roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 14:58

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 14:58 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
Вот вырезка из кода, при компиляции четырехэтажно ругается на строку с malloc:
Код:
char *EditText;
EditText=malloc(30);

sprintf(EditText,"Бла-бла-бла");

Может еще както можно? Если да, то хотелось бы всетаки и malloc научится пользовать.
Какие еще варианты для создания стринговой переменной?
В скриптах для ПК использовал следующее:
Код:
char *temp;
temp=malloc(15);
sprintf(temp,"Station%i",num);

Думал и тут прокатит. :pardon:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 15:12 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
А чем не устроит простой буффер? Сделай буффер на 64 символа, записывай туда и ноль в конце..
malloc очень замедляет работу МК


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 15:21 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Какой контроллер? Компилятор?

В общем и целом, есть мнение, что динамическое выделение памяти в встраиваемых системах - зло

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 15:26 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
не зло если есть специальный контроллер памяти. Но для таких маленьких контроллеров - нет смысла работать с динамической памятью, тк ее там очень мало и фрагментация может сильно сказаться. Советую забыть о malloc для МК ниже ARM9.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 15:30 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
Понятно, думал что так праильнее... Контроллер Мега32. Компилятор Вин... чивото там.

2Сергей. Т.е. следующим образом?
Код:
char EditText[]={0,0,0,0,0,0,0,0,0,0,0,0....};

sprintf(EditText,"Бла-бла-бла");

Такая конструкция должна работать?
(Помнится мучался так на ПК пока malloc не начал пользовать).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 16:06 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Код:
char buffer[64];

memset( buffer, 0, sizeof( buffer ) );

sprintf( buffer, "My const char string" );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 20 июл 2009, 17:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
Благодарю. Вечером попробую, и что такое memset почитаю )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 21 июл 2009, 00:10 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
ну вот, таже проблема что и на ПК была - выводит на экранчик всякий мусор (


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 21 июл 2009, 00:27 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Вот тебе пример
Код:
#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е, в данном случае, имеет входные параметры: указатель на буффер и количество
  // символов для записи
 
  ...
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение памяти под string переменную через malloc
СообщениеДобавлено: 21 июл 2009, 00:46 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
Вот блин. Оказуется все работало. И malloc и memset - я функции что на экранчик печатает забыл указать что строка в ОЗУ а не в ПЗУ находится.
(библиотечка glcd)

Дико извиняюсь. :oops:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO