Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа со строками на С в CCS2.20
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Mokena
Пишу программу для вывода информации, в том числе и текста, на графический экран.
Процессор: TMS320F2812, среда разработки: CCS 2.20

Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "Freq: %dMHz". Удобнее всего это сделать с помощью sprintf(), но она всегда возвращает пустую строку. Какие здесь бывают подводные камни? Какие строки нужно использовать: динамические (char *st) или с явно заданной длиной (char *st[20]), нужно ли выделять для них память?
Может быть лучше использовать связку ltoa() + strcpy() + strcat()? Правда, это не совсем удобно, но может-быть работает быстрее?
Edmundo
Цитата(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-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).
Degun
Цитата(Edmundo @ Oct 23 2007, 00:19) *
С динамическй памятью лучше не связываться, во первых надо кучу выделить в памяти (а в 28-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).

А на каком камне и какие конкретно непонятки были с динамической памятью?
Mokena
Цитата(Edmundo @ Oct 23 2007, 00:19) *
Да вроде нет тонкостей...
Объявляете строку, лучше статически и лучше глобальную для начала, подключаете <stdio.h> и все должно работать.
Да... ложанулся я, все дело было в stdio.h - я забыл его подключить 01.gif. Странно, что компилятор ничего не сказал.
mdmitry
Цитата(Mokena @ Oct 23 2007, 19:55) *
Странно, что компилятор ничего не сказал.

В большинстве компиляторов опции предупреждений заданы по умолчанию не все. В настойках лучше включить все предупреждения, так от многих ошибок (включая понетциальные ) можно уберечься (собственный печальный опыт sad.gif )
Edmundo
Цитата(Degun @ Oct 23 2007, 16:20) *
А на каком камне и какие конкретно непонятки были с динамической памятью?

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

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

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