реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа со строками на С в CCS2.20
Mokena
сообщение Oct 22 2007, 19:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 4-06-07
Пользователь №: 28 174



Пишу программу для вывода информации, в том числе и текста, на графический экран.
Процессор: TMS320F2812, среда разработки: CCS 2.20

Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "Freq: %dMHz". Удобнее всего это сделать с помощью sprintf(), но она всегда возвращает пустую строку. Какие здесь бывают подводные камни? Какие строки нужно использовать: динамические (char *st) или с явно заданной длиной (char *st[20]), нужно ли выделять для них память?
Может быть лучше использовать связку ltoa() + strcpy() + strcat()? Правда, это не совсем удобно, но может-быть работает быстрее?
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Oct 22 2007, 20:19
Сообщение #2


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(Mokena @ Oct 22 2007, 23:49) *
Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "Freq: %dMHz". Удобнее всего это сделать с помощью sprintf(), но она всегда возвращает пустую строку. Какие здесь бывают подводные камни? Какие строки нужно использовать: динамические (char *st) или с явно заданной длиной (char *st[20]), нужно ли выделять для них память?
Может быть лучше использовать связку ltoa() + strcpy() + strcat()? Правда, это не совсем удобно, но может-быть работает быстрее?

Да вроде нет тонкостей...
Объявляете строку, лучше статически и лучше глобальную для начала, подключаете <stdio.h> и все должно работать. Например так:

Код
#include <stdio.h>
char g_sFreq[32];

void main()
{
    sprintf(g_sFreq, "Freq: %d MHz", 13);
}


Если какие-то проблемы -- надо смотреть, иногда бывает из-за недостаточного стека или еще из-за чего.

С динамическй памятью лучше не связываться, во первых надо кучу выделить в памяти (а в 28-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).


--------------------
شامل
Go to the top of the page
 
+Quote Post
Degun
сообщение Oct 23 2007, 12:20
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277



Цитата(Edmundo @ Oct 23 2007, 00:19) *
С динамическй памятью лучше не связываться, во первых надо кучу выделить в памяти (а в 28-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).

А на каком камне и какие конкретно непонятки были с динамической памятью?
Go to the top of the page
 
+Quote Post
Mokena
сообщение Oct 23 2007, 15:55
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 4-06-07
Пользователь №: 28 174



Цитата(Edmundo @ Oct 23 2007, 00:19) *
Да вроде нет тонкостей...
Объявляете строку, лучше статически и лучше глобальную для начала, подключаете <stdio.h> и все должно работать.
Да... ложанулся я, все дело было в stdio.h - я забыл его подключить 01.gif. Странно, что компилятор ничего не сказал.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 23 2007, 20:32
Сообщение #5


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Mokena @ Oct 23 2007, 19:55) *
Странно, что компилятор ничего не сказал.

В большинстве компиляторов опции предупреждений заданы по умолчанию не все. В настойках лучше включить все предупреждения, так от многих ошибок (включая понетциальные ) можно уберечься (собственный печальный опыт sad.gif )


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Oct 24 2007, 04:43
Сообщение #6


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(Degun @ Oct 23 2007, 16:20) *
А на каком камне и какие конкретно непонятки были с динамической памятью?

C6701, это было очень давно, с тех пор никогда не пользовался динамическим распределением памяти. Что за непонятки были не помню smile.gif но помню, что необходимости там в динамике не было.


--------------------
شامل
Go to the top of the page
 
+Quote Post
Degun
сообщение Oct 24 2007, 07:30
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277



Цитата(Edmundo @ Oct 24 2007, 08:43) *
C6701, это было очень давно, с тех пор никогда не пользовался динамическим распределением памяти. Что за непонятки были не помню smile.gif но помню, что необходимости там в динамике не было.

Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю?
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Oct 24 2007, 08:12
Сообщение #8


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(Degun @ Oct 24 2007, 11:30) *
Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю?

[OFF], но все же.
DSP/BIOS с динамическим распределение не связан, ибо "new", "malloc" и т.п. это операторы/функции C/C++. Вы можете программировать без DSP/BIOS (ведь было даже время, когда БИОСа не было!) и отлично пользоваться динамическим распределением. Но мне, повторюсь, на ЦОС задачах необходимости в динамике никогда не было.
Что касается аллокатора в БИОСе, то это вероятно для выделение буферов (объект BUF), вот это вещь вполне полезная, так как там механизмы немного другие.


--------------------
شامل
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 07:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016