|
|
  |
Keil LPC1769 нехватка RAM(?), Данные после сборки проекта вмещаются в RAM но не всё так просто. |
|
|
|
Oct 31 2012, 04:13
|
Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794

|
Доброго времени суток. Прошу прощения, если вопрос глупый, однако спросить больше негде.
Есть программа, которая должна быть запущенна через RTX Keil на LPC1769. Проект собирается, по выводу линковщика всё выглядит так, будто должно ещё оставаться свободное место и в ПЗУ и в ОЗУ, однако при работе в симуляторе проект циклится ещё где-то при инициализации RTOS. Если же в одной из областей памяти при сборке проекта прописать размер не 0x8000, а 0xA000, то всё работает нормально. Вопрос такой, это в проекте косяк или действительно не хватает ОЗУ?
|
|
|
|
|
Oct 31 2012, 05:11
|
Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794

|
Цитата(jcxz @ Oct 31 2012, 11:39)  Однозначно - в проекте. Если не хватает памяти, проект не должен собираться. Хорошо, наверное так. Но тогда почему добавленные 8кб исправляют ситуацию? Как разобраться в чём ошибка? В отладчике проект зацикливается ещё до выполнения функции SystemCoreClockUpdate в файле system_LPC17xx.c, после того, как уже вышел из SystemInit. При этом от размера указанной при сборке доступной RAM меняется место, где проект зацикливается, но он всё равно собирается и запускается в отладчике. Если надо, приложу часть кода из дизассемблера.
|
|
|
|
|
Oct 31 2012, 10:35
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(Dron_Gus @ Oct 31 2012, 11:59)  Не все симуляторы правильно симулируют периферию. Кажетс в том же Keil в симуляторе LPC17** циклился на ожидании захвата PLL. Подтверждаю -- сам налетал на такое. Хотя наверное сейчас ошибка исправлена)
--------------------
|
|
|
|
|
Nov 1 2012, 02:01
|
Группа: Новичок
Сообщений: 3
Регистрация: 18-07-12
Пользователь №: 72 794

|
Цитата(AlexandrY @ Oct 31 2012, 19:50)  Где в RTX такая функция "SystemInit"? Есть только os_sys_init , и из нее не выходят. В файле system_LPC17xx.c строка 507. В ней как раз и происходит ожидание захвата PLL, как писал Dron_Gus. Проблема в том, что из вывода дизассемблера не понятно какой части когда программы это дело соответствует, и как это исправлять. Где-то читал, что стек начинается с конца ОЗУ и растёт вниз. Может быть такое, что стек и данные в ОЗУ пересекаются? Это бы объяснило, почему увеличение размера ОЗУ помогает. Если да, то как проверить и исправить?
|
|
|
|
|
Nov 1 2012, 14:10
|

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. Обычно самые не очевидные и тяжелые проблемы бывают с ним. Поэтому рекомендую исследовать его пространство на предмет засорения, а сперва увеличить его. Системный стек тоже возможно требует увеличения.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|