Перейти к содержанию
    

Работа со строками на С в CCS2.20

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

Процессор: TMS320F2812, среда разработки: CCS 2.20

 

Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "Freq: %dMHz". Удобнее всего это сделать с помощью sprintf(), но она всегда возвращает пустую строку. Какие здесь бывают подводные камни? Какие строки нужно использовать: динамические (char *st) или с явно заданной длиной (char *st[20]), нужно ли выделять для них память?

Может быть лучше использовать связку ltoa() + strcpy() + strcat()? Правда, это не совсем удобно, но может-быть работает быстрее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "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-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А на каком камне и какие конкретно непонятки были с динамической памятью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да вроде нет тонкостей...

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

Да... ложанулся я, все дело было в stdio.h - я забыл его подключить :01:. Странно, что компилятор ничего не сказал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, что компилятор ничего не сказал.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А на каком камне и какие конкретно непонятки были с динамической памятью?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю?

[OFF], но все же.

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

Что касается аллокатора в БИОСе, то это вероятно для выделение буферов (объект BUF), вот это вещь вполне полезная, так как там механизмы немного другие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...