Mokena 0 22 октября, 2007 Опубликовано 22 октября, 2007 · Жалоба Пишу программу для вывода информации, в том числе и текста, на графический экран. Процессор: TMS320F2812, среда разработки: CCS 2.20 Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "Freq: %dMHz". Удобнее всего это сделать с помощью sprintf(), но она всегда возвращает пустую строку. Какие здесь бывают подводные камни? Какие строки нужно использовать: динамические (char *st) или с явно заданной длиной (char *st[20]), нужно ли выделять для них память? Может быть лучше использовать связку ltoa() + strcpy() + strcat()? Правда, это не совсем удобно, но может-быть работает быстрее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edmundo 0 22 октября, 2007 Опубликовано 22 октября, 2007 · Жалоба Нужно преобразовать число в строковое представление и подставить в строку, где уже есть название параметра и единица измерения, к примеру: "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 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба С динамическй памятью лучше не связываться, во первых надо кучу выделить в памяти (а в 28-м итак памяти с гулькин нос), во-вторых это довольно медленно работает (менеджер памяти там и т.п.), в-третьих, бывали непонятки иногда (правда на другом камне). А на каком камне и какие конкретно непонятки были с динамической памятью? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mokena 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба Да вроде нет тонкостей... Объявляете строку, лучше статически и лучше глобальную для начала, подключаете <stdio.h> и все должно работать. Да... ложанулся я, все дело было в stdio.h - я забыл его подключить :01:. Странно, что компилятор ничего не сказал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба Странно, что компилятор ничего не сказал. В большинстве компиляторов опции предупреждений заданы по умолчанию не все. В настойках лучше включить все предупреждения, так от многих ошибок (включая понетциальные ) можно уберечься (собственный печальный опыт :( ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edmundo 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба А на каком камне и какие конкретно непонятки были с динамической памятью? C6701, это было очень давно, с тех пор никогда не пользовался динамическим распределением памяти. Что за непонятки были не помню :) но помню, что необходимости там в динамике не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Degun 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба C6701, это было очень давно, с тех пор никогда не пользовался динамическим распределением памяти. Что за непонятки были не помню :) но помню, что необходимости там в динамике не было. Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edmundo 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба Как я понял динамическое распределение памяти включается в графической оболочке DSP-BIOS в пункте "System\POOL\Enable Allocator Manager"? Странно, но у меня он выключен, а операция new работает нормально. Или я чего-то не понимаю? [OFF], но все же. DSP/BIOS с динамическим распределение не связан, ибо "new", "malloc" и т.п. это операторы/функции C/C++. Вы можете программировать без DSP/BIOS (ведь было даже время, когда БИОСа не было!) и отлично пользоваться динамическим распределением. Но мне, повторюсь, на ЦОС задачах необходимости в динамике никогда не было. Что касается аллокатора в БИОСе, то это вероятно для выделение буферов (объект BUF), вот это вещь вполне полезная, так как там механизмы немного другие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться