Easyelectronics.ru

Электроника для всех
Текущее время: 19 июн 2018, 23:17

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 24 ноя 2017, 09:19 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
Стараюсь все делать по "фэншую". Бережно раскидываю assert-ы ..
и замечаю что с таким подходом,

прога, чуть сложнее и больше в размерах чем LED blinking, если компилировать с поддержкой дебага, перестаёт влазить в 8к памяти. При этом компиляция в релизе - все ОК даже с полной отключкой какой либо оптимизации.

вопрос. как, кто выходит из это ситуации.
типа, настоящему индейцу, на таких объемах памяти ну его нафиг все эти assert-ы?

компилим в релизном режиме, а для отладки по UART в нужных местах кидаем отладочную информацию?
типа

Код:
void debug(char *message)
{
   char *ch = message;
   while (*ch)
   {
      UART1->DR = (u8)(*ch);
      while ((UART1->SR & (u8)UART1_FLAG_TXE) == RESET);
      ch++;
   }
}


что то ещё?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 24 ноя 2017, 17:33 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 589
Откуда: Киев
Зачем такие усложнения?
В STM8 прекрасная отладка, поставил нужные переменные в live watch, поставил брейкпоинты в нужных местах, и смотришь.
Можно даже виртуальную консоль прикрутить, но она сильно тормозит процессор.
А вывод в uart лучше обслужить прерываниями, тогда процесс тормозться не будет.
Вот из готового проекта:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 24 ноя 2017, 19:51 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
SOVA писал(а):
А вывод в uart лучше обслужить прерываниями, тогда процесс тормозится не будет.

то, что асинхронные события, UART к примеру, лучше обрабатывать в прерываниях - очевидно.


я бы под UART кольцевой буфер встроил,
типа такого (уже тут предлагал и обсуждался)

Код:
#define RBUF_INIT(TYPE, LENPOW2 ) volatile struct { \
   uint32_t wr; \
   uint32_t rd; \
   TYPE data[ 1 << (LENPOW2)]; \
}

#define RBUF_PUT( RBUF, INN)  \
  { if((RBUF).rd == (RBUF).wr ) { \
      (RBUF).wr = 0; \
        (RBUF).rd = 0; \
   } \
       (RBUF).data[ RBUF_MASK(RBUF) & (RBUF).wr++] = INN; }

#define RBUF_MASK(RBUF) ( sizeof((RBUF).data)/sizeof((RBUF).data[0]) -1)
#define RBUF_ISEMPTY(RBUF) ((RBUF).rd == (RBUF).wr)
#define RBUF_ISFULL(RBUF) ((RBUF).rd + RBUF_MASK(RBUF) == (RBUF).wr)
#define RBUF_GET( RBUF)  (RBUF).data[ RBUF_MASK(RBUF) & ((RBUF).rd++)]


который дозаливал бы по мере поступления данных.
поскольку очевидно, что в Вашем коде любая попытка ДОотправки данных, во время уже происходящей отправки, приведёт к зависалову в
while (!tx_ready);
хотя свободного места в буфере может оказаться вполне достаточным для того, чтобы побыстрому долить данные для отправки без зависания в основном потоке.
===========================
однако, такие ответы ценны!
спасибо за участие.


Последний раз редактировалось cheblin 25 ноя 2017, 08:47, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 25 ноя 2017, 00:57 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4742
Характерный батхерт выходимцев с PC.
Уютненькок болото их не отпускает.
Не удивлюсь что болезный юзает SPL...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 25 ноя 2017, 20:08 
Старожил

Зарегистрирован: 28 янв 2012, 21:27
Сообщения: 292
Откуда: Питер
Код:
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))


Вот эти самые __FILE__ и __LINE__ жрут довольно много места во флеши. Переделайте этот define, тогда места хватит.
Типа того:
Код:
#define assert_param(expr) ((expr) ? (void)0 : assert_failed(void))
void assert_failed(void);

А источник ошибки смотрите по call stack.

Offtop: как на данном форуме добавить надоевшую личность в чёрный список, чтобы не видеть его посты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 28 дек 2017, 17:46 
Заглядывает иногда

Зарегистрирован: 19 июн 2013, 16:35
Сообщения: 41
еще немного про размер итоговой прошивки тут: viewtopic.php?f=33&t=33471


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 30 дек 2017, 09:57 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 4957
я вот другое заметил
когда при слабой оптимизации начинает не хватать 8к и я включаю полную оптимизацию то отладка становится почти не возможна
по трейкпоинтам он стопорится в каких то случайных местах, но не там где надо

так и должно быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 30 дек 2017, 10:38 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2439
Откуда: Санкт-Петербург
axill, угу. Плюс проблемы с просмотром значений переменных (которые могут вообще быть выпилены оптимизатором или присваиваться не там, где ожидаешь)
Посмотрите в дизассемблере, что компилятор сгенерил - поймёте причины...

Можно собрать релиз с выключенной или неполной оптимизацией (ну, чтобы хотя бы те же assert'ы ушли)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код скомпилированный в дебаг мод - е не влазит...
СообщениеДобавлено: 30 дек 2017, 17:48 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
всё. ассерты убрал, свою либу запилил


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB