Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2018, 05:13

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1248
Откуда: Китай, Пекин
Стараюсь все делать по "фэншую". Бережно раскидываю 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
Сообщения: 594
Откуда: Киев
Зачем такие усложнения?
В STM8 прекрасная отладка, поставил нужные переменные в live watch, поставил брейкпоинты в нужных местах, и смотришь.
Можно даже виртуальную консоль прикрутить, но она сильно тормозит процессор.
А вывод в uart лучше обслужить прерываниями, тогда процесс тормозться не будет.
Вот из готового проекта:
Show


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1248
Откуда: Китай, Пекин
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
Сообщения: 5005
Характерный батхерт выходимцев с 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
Сообщения: 5120
я вот другое заметил
когда при слабой оптимизации начинает не хватать 8к и я включаю полную оптимизацию то отладка становится почти не возможна
по трейкпоинтам он стопорится в каких то случайных местах, но не там где надо

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


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

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

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


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

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


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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