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

 
 
 
Reply to this topicStart new topic
> Keil LPC1769 нехватка RAM(?), Данные после сборки проекта вмещаются в RAM но не всё так просто.
Sv9t
сообщение Oct 31 2012, 04:13
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794



Доброго времени суток.
Прошу прощения, если вопрос глупый, однако спросить больше негде.

Есть программа, которая должна быть запущенна через RTX Keil на LPC1769. Проект собирается, по выводу линковщика всё выглядит так, будто должно ещё оставаться свободное место и в ПЗУ и в ОЗУ, однако при работе в симуляторе проект циклится ещё где-то при инициализации RTOS. Если же в одной из областей памяти при сборке проекта прописать размер не 0x8000, а 0xA000, то всё работает нормально.
Вопрос такой, это в проекте косяк или действительно не хватает ОЗУ?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 31 2012, 04:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Однозначно - в проекте. Если не хватает памяти, проект не должен собираться.
Go to the top of the page
 
+Quote Post
Sv9t
сообщение Oct 31 2012, 05:11
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794



Цитата(jcxz @ Oct 31 2012, 11:39) *
Однозначно - в проекте. Если не хватает памяти, проект не должен собираться.


Хорошо, наверное так. Но тогда почему добавленные 8кб исправляют ситуацию? Как разобраться в чём ошибка? В отладчике проект зацикливается ещё до выполнения функции SystemCoreClockUpdate в файле system_LPC17xx.c, после того, как уже вышел из SystemInit. При этом от размера указанной при сборке доступной RAM меняется место, где проект зацикливается, но он всё равно собирается и запускается в отладчике.

Если надо, приложу часть кода из дизассемблера.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 31 2012, 07:59
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Не все симуляторы правильно симулируют периферию. Кажетс в том же Keil в симуляторе LPC17** циклился на ожидании захвата PLL.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Oct 31 2012, 10:35
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(Dron_Gus @ Oct 31 2012, 11:59) *
Не все симуляторы правильно симулируют периферию. Кажетс в том же Keil в симуляторе LPC17** циклился на ожидании захвата PLL.

Подтверждаю -- сам налетал на такое. Хотя наверное сейчас ошибка исправлена)


--------------------
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 31 2012, 12:50
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Sv9t @ Oct 31 2012, 07:11) *
после того, как уже вышел из SystemInit.


Где в RTX такая функция "SystemInit"?
Есть только os_sys_init , и из нее не выходят.

Go to the top of the page
 
+Quote Post
Sv9t
сообщение Nov 1 2012, 02:01
Сообщение #7





Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794



Цитата(AlexandrY @ Oct 31 2012, 19:50) *
Где в RTX такая функция "SystemInit"?
Есть только os_sys_init , и из нее не выходят.


В файле system_LPC17xx.c строка 507. В ней как раз и происходит ожидание захвата PLL, как писал Dron_Gus.

Проблема в том, что из вывода дизассемблера не понятно какой части когда программы это дело соответствует, и как это исправлять. Где-то читал, что стек начинается с конца ОЗУ и растёт вниз. Может быть такое, что стек и данные в ОЗУ пересекаются? Это бы объяснило, почему увеличение размера ОЗУ помогает. Если да, то как проверить и исправить?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Nov 1 2012, 13:27
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Если вы увеличиваете размерв ОЗУ за пределы физической памяти, то и стек попадает на несуществующую память. Очевидно, что правильно это работать не будет. Либо будет крэп читаться либо Hard Fault случиться. Как это будет работать на симуляторе - неизвестно.
Сделайте выход из цикла ожидания по таймауту. Или вообще не ждите лока. Я думаю, симулятору на это пофиг.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 1 2012, 14:10
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Sv9t @ Nov 1 2012, 04:01) *
В файле system_LPC17xx.c строка 507. В ней как раз и происходит ожидание захвата PLL, как писал Dron_Gus.

Проблема в том, что из вывода дизассемблера не понятно какой части когда программы это дело соответствует, и как это исправлять. Где-то читал, что стек начинается с конца ОЗУ и растёт вниз. Может быть такое, что стек и данные в ОЗУ пересекаются? Это бы объяснило, почему увеличение размера ОЗУ помогает. Если да, то как проверить и исправить?


В Keil-е по умолчанию стек растет вверх, а системный heap вниз. При плохом раскладе они наезжают друг на друга.
Как точно используется системный heap скрыто в библиотеках компилятора ARM.
Обычно самые не очевидные и тяжелые проблемы бывают с ним. Поэтому рекомендую исследовать его пространство на предмет засорения, а сперва увеличить его.
Системный стек тоже возможно требует увеличения.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 2 2012, 07:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



С RTX бывали проблемы под LPC2000. Девайс мог проработать и час, мог и два, а мог и 5 мин не проработать. Ничего динамически не выделялось, куча не использовалась. А вот увеличил стек на сотню байт - и все прошло.
Сначала верил Кейлу, где он расчитывал макс.глубину вызовов, но, похоже, не все он учитывает. Так что посмотреть на цифру все-таки стОит, но и увеличить ее процентов на 20 не помешает
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:47
Рейтинг@Mail.ru


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