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

 
 
> static const vs const, ошарашен!
ViKo
сообщение Jan 14 2015, 16:02
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Добавил к программе еще немного вывода текстовых строк, задал их в виде массива, условно:
const char *Text[] = { "text1", "text2", "text3" };
И функцию, естественно, для вывода, аналогичную другим таким же.
И - завалил программу! Улетает при старте в HardFault, как понял, из недр RTOS (Keil CMSIS-RTOS RTX), пытаясь выделить некую память из пула. Я и размер кучи изменял, и стек задач, и ничего не помогает.
Стал с прошлым вариантом сравнивать (вот где пришлись кстати TortoiseHg c Total Commander). Делаю небольшие изменения, компилирую, запускаю. Дошел до этого массива. И как только добавил static const char *Text.... все заработало.
Поможите люди добрые, объясните, как такое могёт быть? Проект выложить не могу, он великий и коммерческий. Хотелось бы понять принцип.
Файлов в проекте - штук 20. И память используется сильно, не могу сказать, вся / не вся. Если компилируется, значит, есть куда пихать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jan 14 2015, 20:12
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я сделал (?, проверю работоспособность завтра) иначе:
Код
static const char * const Text[]

Теперь массив указателей размещен во flash.
Вижу, что размер RO-data увеличился на 160 байтов, а RW-data на столько же уменьшился.
yeah.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 14 2015, 20:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Jan 14 2015, 23:12) *
Теперь массив указателей размещен во flash.

Только надо еще проверить, чтобы эта секция на самом деле во флеш попала, по мап-файлу.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 14 2015, 20:18
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SM @ Jan 14 2015, 23:15) *
Только надо еще проверить, чтобы эта секция на самом деле во флеш попала, по мап-файлу.

Да, я вижу адрес массива указателей в map-файле. И размер 160 байтов. Сами строки - где-то... ну, это как и должно быть.
Ох, наскребу завтра свободного ОЗУ!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   static const vs const   Jan 14 2015, 16:02
- - SM   а это сильно зависит от того, где определены эти с...   Jan 14 2015, 16:19
- - ViKo   Массив - внутри функции. Имя - уникальное (реально...   Jan 14 2015, 16:23
- - SM   Если это внутри функции, то, возможно, просто стек...   Jan 14 2015, 16:40
- - ViKo   Если задаю const chat *Text, что заставляет компил...   Jan 14 2015, 16:47
|- - SM   Цитата(ViKo @ Jan 14 2015, 19:47) Если за...   Jan 14 2015, 16:59
|- - CrimsonPig   Цитата(SM @ Jan 14 2015, 16:59) Объявлени...   Jan 14 2015, 19:03
|- - SM   Цитата(CrimsonPig @ Jan 14 2015, 22:03) т...   Jan 14 2015, 19:20
- - ViKo   Посмотрел листинги со static и без. Для const при ...   Jan 14 2015, 20:02
- - SM   Ну, о чем я и говорил. Скорее всего у Вас стека ма...   Jan 14 2015, 20:06
|- - CrimsonPig   Цитата(ViKo @ Jan 14 2015, 20:12) Я сдела...   Jan 14 2015, 23:38
- - ViKo   static const *text[] используется у отцов-основате...   Jan 15 2015, 01:42
- - ViKo   Проверил. Все работает. Заодно посмотрел, что полу...   Jan 15 2015, 09:35
|- - Andrew2000   на эту тему: http://rus-linux.net/MyLDP/algol/Sha...   Jan 15 2015, 18:17
- - SM   Ну, все в строгом соответствии с ANSI/IEC. Вывод и...   Jan 15 2015, 09:45


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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:03
Рейтинг@Mail.ru


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