Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CrossStudio 1.7 и LPC1768
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Dron_Gus
На сайте Rowley пак для этой линейки только для студии от 2.0. Но на нее нет лекарства и выглядит как матрешка. Пытаюсь подружить с версией 1.7. Осталось два нерешенных вопроса.
1) при каждой полной перекомпиляции или изменении настроек слетает скрипт линкера и из него пропадает
Код
__STACKSIZE_PROCESS__ = 128;

без этого линкер ес-но ругается. Каждый раз добавлять это в файл - тоже бред. Остальные значения студия берет из настроек. Этой настройки нема.
2) мало относится к студии конкретно. Как заставить линкер раскладывать секции по нескольким сегментам? Как только вылез за 32 К пошли маты
Код
.bss is too large to fit in RAM memory segment

Хотя я в файле flash_placement.xml для всех трех сегментов указал
Код
    <ProgramSection alignment="4" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process"/>
    <ProgramSection alignment="4" load="No" name=".fast_run"/>
    <ProgramSection alignment="4" load="No" name=".data_run"/>
    <ProgramSection alignment="4" load="No" inputsections="*(.bss .bss.* .gnu.linkonce.b.*) *(COMMON)" name=".bss"/>
    <ProgramSection alignment="4" load="No" inputsections="*(.non_init .non_init.*)" name=".non_init"/>
yuri_t
http://www.tnkernel.com/downloads/tnkernel...xM3-LPC1766.zip

Там (по ссылке) есть проект и Flash Loader для CrossStudio 1.7.

Предварительно надо поставить LPC17ХХ pack от версии 2.0. Он ставится,
а всякие warning messages при установке можно проигнорировать.
Dron_Gus
Пак поставил. За ссылку спасибо, но она мне мало помогла. Ибо там в Loader_MemoryMap.xml все равно описан только один сегмент sram. И вместо MemoryMap там используется *.ld файл. Я с этим пока не разобрался.
yuri_t
Цитата(Dron_Gus @ Nov 22 2009, 00:44) *
Пак поставил. За ссылку спасибо, но она мне мало помогла. Ибо там в Loader_MemoryMap.xml все равно описан только один сегмент sram. И вместо MemoryMap там используется *.ld файл. Я с этим пока не разобрался.


Script линкера *.ld для проекта (не Loader-а) строится автоматически из файла flash_placement.xml.

В частности:

<ProgramSection alignment="4" size="__STACKSIZE__" load="No" name=".stack"/>
<ProgramSection alignment="4" size="__STACKSIZE_IRQ__" load="No" name=".stack_irq"/>
<ProgramSection alignment="4" size="__STACKSIZE_FIQ__" load="No" name=".stack_fiq"/>
<ProgramSection alignment="4" size="__STACKSIZE_SVC__" load="No" name=".stack_svc"/>
<ProgramSection alignment="4" size="__STACKSIZE_ABT__" load="No" name=".stack_abt"/>
<ProgramSection alignment="4" size="__STACKSIZE_UND__" load="No" name=".stack_und"/>


__STACKSIZE_PROCESS__ там не используется .
Dron_Gus
Еще раз спасибо! Вчера вечером недоосознал Ваше сообщение и пытался прикрутить файлы от лоадера. Сегодня понял свою ошибку и первая проблема ушла. Хотя пока не понятно откуда берется значение для установки стека приложения (их же в cortex-m3 всего два осталось). И можно ли поставить размеры стеков irq и fiq равными нулю.

По второй проблеме - кроссстудия все равно продолжает считать, что у нее в распоряжении только 32 Кб памяти. sad.gif
yuri_t
В файле flash_placement.xml описываются сегменты которые линкер будет считать
относящимся к RAM

<Root name="Flash Section Placement">
<MemorySegment name="Internal SRAM;RAM;SRAM;SDRAM;DRAM">
...
...

В файле LPC1766_MemoryMap.xml описаны дополнительные сегменты ОЗУ-

...
...
<MemorySegment size="0x4000" access="Read/Write" start="0x2007C000" name="AHBSRAM0"/>
<MemorySegment size="0x4000" access="Read/Write" start="0x20080000" name="AHBSRAM1"/>
...
...


Попробуите добавить "AHBSRAM0" и "AHBSRAM1" к строке "MemorySegment" в файле
flash_placement.xml - должно быть что-то типа

<MemorySegment name="Internal SRAM;RAM;SRAM;SDRAM;DRAM;AHBSRAM0;AHBSRAM1">

Следует помнить, что инициализацию регистров для нормальной работы с "AHBSRAM0" и "AHBSRAM1"
надо делать самому, причем до первого access к этим областям памяти.
Dron_Gus
Цитата(yuri_t @ Nov 22 2009, 16:26) *
Попробуите добавить "AHBSRAM0" и "AHBSRAM1" к строке "MemorySegment" в файле
flash_placement.xml - должно быть что-то типа

<MemorySegment name="Internal SRAM;RAM;SRAM;SDRAM;DRAM;AHBSRAM0;AHBSRAM1">

Следует помнить, что инициализацию регистров для нормальной работы с "AHBSRAM0" и "AHBSRAM1"
надо делать самому, причем до первого access к этим областям памяти.


Вроде как линкуется и не ругается. Правда встроенный "памяте-метр" показывает превышение. При запуске вылетает в HardFault. Хотя в стартап добавил:
Код
  ldr r0, =SC_BASE_ADDRESS
  /* power on usb and ethernet */
  ldr r1, [r0, #PCONP_OFFSET]
  orr r1, r1, #PCONP_PCENET_BIT
  orr r1, r1, #PCONP_PCUSB_BIT
  str r1, [r0, #PCONP_OFFSET]

Я в асме не силен. Это верно? И достаточно ли включить соответствующие модули, чтобы была доступна их память?
yuri_t
Цитата(Dron_Gus @ Nov 22 2009, 19:34) *
Вроде как линкуется и не ругается. Правда встроенный "памяте-метр" показывает превышение. При запуске вылетает в HardFault. Хотя в стартап добавил:
Код
  ldr r0, =SC_BASE_ADDRESS
  /* power on usb and ethernet */
  ldr r1, [r0, #PCONP_OFFSET]
  orr r1, r1, #PCONP_PCENET_BIT
  orr r1, r1, #PCONP_PCUSB_BIT
  str r1, [r0, #PCONP_OFFSET]

Я в асме не силен. Это верно? И достаточно ли включить соответствующие модули, чтобы была доступна их память?


Вроде верно - здесь "вроде" потому что, к сожалению, в настоящий момент у меня нет под рукой hardware чтобы все проверить.
Dron_Gus
Что-то неверно. Все равно вылетаю в hardfault. В начале маина соответствующие биты все равно в нуле (PCONP_PCENET_BIT и PCONP_PCUSB_BIT). Если пытаться их установить в мэйне - тоже hardfault. Непонятно. Еще и обертка на hardfault вылетает в hardfault. Что-то я запутался, короче. smile.gif
yuri_t
Вот рабочий проект для LPC17xx и CrossWorks 1.7 c использованием AHB RAM
Dron_Gus
Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.