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

 
 
 
Reply to this topicStart new topic
> Размещение функции в RAM в IDE Keil., Написание scatter файла.
JohnKorsh
сообщение Mar 3 2015, 14:38
Сообщение #1


Частый гость
**

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



Добрый день!
Пишу для 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 файлами дело никогда не имел, поэтому, видимо, написал ерунду.
Не поможет ли кто грамотно написать?

Сообщение отредактировал IgorKossak - Mar 3 2015, 15:45
Причина редактирования: [codebox] для длинного кода, [code] - для короткого
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 3 2015, 15:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Код
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
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 3 2015, 17:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



правой кнопкой на файл, опшенс, и выбрать чтобы она жила в РАМе.... дальше все будет само
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 3 2015, 18:54
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



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

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

1. aaarrr в строке *.o (MCU_RAM_CODE) дал правильную наводку.
2. Автор темы должен заменить одинарные кавычки в 'MCU_RAM_CODE' на двойные "MCU_RAM_CODE".
Go to the top of the page
 
+Quote Post
редактор
сообщение Mar 4 2015, 09:04
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



пройдет.пробовал. В один файл собираются все RAM функции. Далее опции файла -> разместить в RАМ. Остальное компилятор делает сам.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
JohnKorsh
сообщение Mar 4 2015, 14:56
Сообщение #6


Частый гость
**

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



Спасибо
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:27
Рейтинг@Mail.ru


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