|
|
  |
Работа со строками на С в CCS2.20 |
|
|
|
Oct 22 2007, 19:49
|
Участник

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

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

Мастер
   
Группа: Свой
Сообщений: 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-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне).
--------------------
شامل
|
|
|
|
|
Oct 23 2007, 12:20
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277

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

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

|
Цитата(Edmundo @ Oct 23 2007, 00:19)  Да вроде нет тонкостей... Объявляете строку, лучше статически и лучше глобальную для начала, подключаете <stdio.h> и все должно работать. Да... ложанулся я, все дело было в stdio.h - я забыл его подключить  . Странно, что компилятор ничего не сказал.
|
|
|
|
|
Oct 24 2007, 07:30
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277

|
Цитата(Edmundo @ Oct 24 2007, 08:43)  C6701, это было очень давно, с тех пор никогда не пользовался динамическим распределением памяти. Что за непонятки были не помню  но помню, что необходимости там в динамике не было. Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю?
|
|
|
|
|
Oct 24 2007, 08:12
|

Мастер
   
Группа: Свой
Сообщений: 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), вот это вещь вполне полезная, так как там механизмы немного другие.
--------------------
شامل
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|