|
AT91RM9200 - разбиение кода на быструю и медленную части, SDRAM и внутренняя SRAM |
|
|
|
Oct 27 2008, 19:43
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
Имею в качестве среды среды разработки IAR 5.11 и отладочную плату AS-9200 (Argussoft) + JTAG SAM-ICE. вопрос в следующем: 1. Как содать проект в IAR-e таким образом, что несколько коротких функций (написаны ASM командами и добавлены в проект отдельными файлами) при загрузке были размещены во внутренней SRAM контроллера, а остальные функции (такие как main, функции работы с флешкой AT45DB642D, функции вывода информации на экран, и другие) были размещены в внешней SDRAM. Функции, которые необходимо размещать в SRAM, критичны к времени выполнения, поэтому и ставиться такая задача. Все функции проекта не умещаются в SRAM. При явном указании размещения функций в файле *.icf файл прошивки контроллера весит свыше 500 мегабайт, что естественно неприемлемо  . Всех участников форума прошу предложить хоть какие-то варианты - мой мозг уже разрывается на куски, мысли закончились. P.S. Вся прошивка весит где-то 30-50 кБ, поэтому варианты с установкой ОСи (любой) не предлагать - слишком высокая цена получается на реализацию платы (достаточно большое количество SDRAM).
|
|
|
|
|
 |
Ответов
(30 - 44)
|
Nov 7 2008, 18:58
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
Цитата(dch @ Nov 7 2008, 19:44)  а с каким темпом Для компенсации вышеописанных неточностей с периодом 100 нс.
|
|
|
|
|
Nov 7 2008, 19:47
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
Цитата(aaarrr @ Nov 7 2008, 22:19)  Еще раз замечу, что такой подход к решению задачи в корне неверен. Я алгоритм обработки (оцифровки) сигнала сейчас изменять не могу - попросту не успею (проект надо сдать 21 ноября). Плюс ко всему этот алгоритм обсчитывали статисты, так что сложностей навал  . Реализую то, что начальство сказало.
|
|
|
|
|
Nov 9 2008, 21:29
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
Цитата(dch @ Nov 9 2008, 22:26)  там вроде ножкой невозможно щелкать быстрее чем 5MHz , 100 наносекунд это близко к локаторной дискретизации 100 нс получалось ( точно не помню с какими настройками PLL, но с режимом тактирования ядра synchronous)
|
|
|
|
|
Nov 10 2008, 17:36
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
To aaarrr: По поводу кеширования: 1) адреса в разделе sections - это и есть описание адресного пространства (необходимого программе, т.е. фактически ею занимаемого)? 2) MMU в данном случае будет кешировать на автомате всё, что будет запускаться из main() до того момента, когда не придет команда lock ICache?
Сообщение отредактировал Antokha - Nov 10 2008, 18:01
|
|
|
|
|
Nov 11 2008, 19:45
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
To aaarrr: Спасибо огромное. В самом начале кода есть строки: ldr r2, =2_110111110010 ; set access permissions (AP) for full access SVC/USR (11:10) Это загрузка константы записанной по адресу 110111110010 (0xDF2) или здесь должна быть сама константа. Вопрос возник потому, что в первом случае странно хранить константу в памяти, если она используется один раз, кроме, конечно, варианта с наиболее быстрым исполнением этого кода.
|
|
|
|
|
Nov 12 2008, 13:00
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078

|
To aaarrr: Подправил адреса секций и оформил этот код функцией: ; Set global core configurations mrc p15, 0x00, r0, c1, c0, 0x00 ; read CP15 register 1 into r0 orr r0, r0, #(0x01 << 0x0c) ; enable I Cache orr r0, r0, #(0x01 << 0x02) ; enable D Cache orr r0, r0, #(0x3 << 0x1e) ; enable asynchronous clocking mode orr r0, r0, #0x01 ; enable MMU ; Additional configuration options ; ; orr r0, r0, #(0x01 << 0x0e) ; enable Round Robin cache replacement ; orr r0, r0, #(0x01 << 0x0d) ; enable Hi Vectors orr r0, r0, #(0x01 << 0x01) ; enable data address alignment checking mcr p15, 0x00, r0, c1, c0, 0x00 ; write cp15 register 1 <------------------------------------- POP {LR} POP {R7} POP {R6} POP {R5} POP {R4} POP {R3} POP {R2} POP {R1} POP {R0}
BX LR ;; return sections // 1 DCD 0x21F00800 ; _SDRAM_READ_ Section 00000000; Flash DCD 0x21F03FFF ; 00100000 DCD 0xC ; 2_1100 ; wb, buffered // c03fc000 DCD 0x21F04000 ; c0000000 ; SDRAM Page 0 - _SDRAM_WRITE_ Section DCD 0x21F04FFF ; c0400000 DCD 0xC ; 2_1100 ; wb, buffered END
На команде обозначенной стрелкой виснет наглухо. В секции _SDRAM_READ_ размещен участок кода, помеченный в файле *.icf {readonly}, в секции _SDRAM_WRITE_ - соответственно {readwrite}. Почему так? Что я делаю неправильно?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|