Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Размещение функции в RAM в IDE Keil.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
JohnKorsh
Добрый день!
Пишу для EFM32G880F128 в IDE Keil. Понадобилось разместить функцию для исполнения из RAM.
Как вычитал, для этого в Keil используются scatter файлы.
Вот какой файл выдал Keil в моём проекте:

Код
LR_IROM1 0x00000000 0x00020000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00020000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00004000  { ; RW data
   .ANY (+RW +ZI)
  }
}

Не поможет ли кто грамотно вставить RAM секцию в этот файл?
Вот мой, неработающий, вариант:

Код
LR_IROM1 0x00000000 0x00020000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00020000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00004000  { ; RW data
   .ANY (+RW +ZI)
  }
   MCU_IRAM +0 {                 : My section, called MCU_RAM_CODE        
    .ANY (+RW +ZI)
    .ANY (MCU_RAM_CODE)
   }
}

В исходном коде сделал так:
#define __SI32_RRAM __attribute__ ((section('MCU_RAM_CODE')))
...
__SI32_RRAM void WriteToFlash (void)

Получил от компилятора:
Error 600 Too many characters in character constant.

Со scatter файлами дело никогда не имел, поэтому, видимо, написал ерунду.
Не поможет ли кто грамотно написать?
aaarrr
Код
R_IROM1 0x00000000 0x00020000
{; load region size_region
    ER_IROM1 0x00000000 0x00020000
    {; load address = execution address
        *.o (RESET, +First)
        *(InRoot$$Sections)
        .ANY (+RO)
    }
    RW_IRAM1 0x20000000 0x00004000
    {; RW data
        .ANY (+RW +ZI)
        *.o (MCU_RAM_CODE)
    }
}


Код
#pragma arm section CODE = "MCU_RAM_CODE"

void WriteToFlash(void)
{
...
}

#pragma arm section CODE
Golikov A.
правой кнопкой на файл, опшенс, и выбрать чтобы она жила в РАМе.... дальше все будет само
KnightIgor
Цитата(Golikov A. @ Mar 3 2015, 19:46) *
правой кнопкой на файл, опшенс, и выбрать чтобы она жила в РАМе.... дальше все будет само

Это очень частный случай. Функции должны быть в исходниках и еще сведены в один файл. С предкомпилированной библиотекой такое не пройдет. У автора темы речь идет об EFM32 процессорах, у которых функции модицикации флэша ДОЛЖНЫ быть размещены в ОЗУ.

1. aaarrr в строке *.o (MCU_RAM_CODE) дал правильную наводку.
2. Автор темы должен заменить одинарные кавычки в 'MCU_RAM_CODE' на двойные "MCU_RAM_CODE".
редактор
пройдет.пробовал. В один файл собираются все RAM функции. Далее опции файла -> разместить в RАМ. Остальное компилятор делает сам.
JohnKorsh
Спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.