|
scmRTOS. Порт под AT91SAM7X, у кого есть уже отлаженный? |
|
|
|
 |
Ответов
|
Jan 9 2008, 15:36
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата(Сергей Борщ @ Jan 9 2008, 15:45)  А чем SAM7X отличается от SAM7S с точки зрения исходников ОС? Я бегло просматривал документацию на SAM7X, но не нашел там принципиальных отличий, которые могли бы повлиять на работу ОС. Принципиальных различий вроде нет, но возникли некоторые проблемы: 1. Вылазила ошибка Memory access timed out @ 00003F00 -> JTAG speed too high при попытке выполнить Reset. Поправил mac файл, вроде легче стало. Надеюсь тут не ошибся: Код _InitRSTC() { __writeMemory32(0xA5000001, 0xFFFFFD08,"Memory"); // Allow user reset }
_InitPLL() {
__message "Set Main Oscillator"; __writeMemory32(0x00004001,0xFFFFFc20,"Memory"); // MOSC while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x1) );
__message "Set PLL to 96MHz"; __writeMemory32(0x10483f0e,0xFFFFFc2c,"Memory"); // LOCK while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x4) );
__message "Set Master Clock to 48MHz"; __writeMemory32(0x00000004,0xFFFFFc30,"Memory"); // MCKRDY while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x8) ); __writeMemory32(0x00000007,0xFFFFFc30,"Memory"); // MCKRDY while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x8) ); }
execUserPreload() { Reset(); Remap_RAM(); __writeMemory32(0xD3,0x98,"Register"); // CPSR = SVC mode, ARM, IRQ, FIQ disabled _InitRSTC(); }
execUserReset() { Reset(); Remap_RAM();
__writeMemory32(0xD3,0x98,"Register"); // CPSR = SVC mode, ARM, IRQ, FIQ disabled __writeMemory32(0x00000000,0xB4,"Register"); __emulatorSpeed(0); // Set JTAG speed to full speed }
__var tmp; Remap_RAM() { tmp = __readMemory32(0x00200000, "Memory"); // read from RAM area __writeMemory32(~tmp, 0x00200000, "Memory"); // alter RAM area if( ~tmp != __readMemory32(0x00000000, "Memory") ) // check if altering mirrored to remap area { __writeMemory32(0x00000001, 0xFFFFFF00,"Memory"); } __writeMemory32(tmp, 0x00200000 ,"Memory"); // restore RAM data __message " remap "; }
Reset() { __message "execUserReset()"; __emulatorSpeed(30000); // Set JTAG speed to 30kHz to make a hardware reset __writeMemory32(0xA5000004, 0xFFFFFD00, "Memory"); // reset the peripherals _InitPLL(); // Allow to debug at JTAG Full Speed __emulatorSpeed(0);
} 2. Дописал ещё в device.h #elif defined(AT91SAM7X256) #include <ioAT91SAM7X256.h> и в OS_Target_core.h | defined(AT91SAM7X256) Надеюсь ничего больше не забыл, нето ведь всё равно скомпилится -) -( Сейчас вроде всё работает.
|
|
|
|
|
Jan 9 2008, 16:19
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(LessNik @ Jan 9 2008, 17:36)  Принципиальных различий вроде нет, но возникли некоторые проблемы: 1. Вылазила ошибка Memory access timed out @ 00003F00 -> JTAG speed too high при попытке выполнить Reset. Вроде на последних версиях иара с adaptive clocking уже не слетает. Аналогичные вашим действия у меня вроде как делались в Reset(), правда там они были сделаны с проверкой на наличие JLink, если у вас другой отладчик - надо просто выкинуть проверки. Цитата(LessNik @ Jan 9 2008, 17:36)  Дописал ещё в device.h и в OS_Target_core.h Это тоже уже дописано в той версии, которая лежит в репозитории. Попробуйте ее - там много улучшений, и она же будет включена в ближайший релиз.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 10 2008, 05:33
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата Это тоже уже дописано в той версии, которая лежит в репозитории. Попробуйте ее - там много улучшений, и она же будет включена в ближайший релиз. Этот репозиторий на ftp электроникса? У меня нет к нему доступа. Может можно ещё откуда-нибудь скачать. Если можно, дайте прямую ссылку.
|
|
|
|
|
Jan 10 2008, 11:46
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата(dxp @ Jan 10 2008, 10:07)  Нет, имеется в виду репозиторий на sourceforge.net. http://scmrtos.svn.sourceforge.net/viewvc/scmrtos/Спасибо. Скачал. Скомпилил и возникла ошибка. Дописал в Target_AT91SAM7.h #define OS_INTERRUPT __arm __irq и всё скомпилилось, но мой пример перестал работать стабильно(чип почему-то перезагружается).
|
|
|
|
|
Jan 10 2008, 12:36
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(LessNik @ Jan 10 2008, 13:46)  Спасибо. Скачал. Скомпилил и возникла ошибка. Дописал в Target_AT91SAM7.h #define OS_INTERRUPT __arm __irq и всё скомпилилось, но мой пример перестал работать стабильно(чип почему-то перезагружается). Насчет #define проверю. По поводу перезагрузки - посмотрите, сколько стека выделяется для scmRTOS_IDLE_PROCESS_STACK_SIZE в файле scmRTOS_config.h Раньше там выделялось только то, что хочет пользователь для своих нужд и "в недрах" к этому числу добавлялось 17 * sizeof(TStackItem). Теперь надо полный размер указывать в scmRTOS_config.h, т.е. минимум 17 * sizeof(TStackItem) Цитата(LessNik @ Jan 10 2008, 13:46)  Дописал в Target_AT91SAM7.h #define OS_INTERRUPT __arm __irq Но оно там есть, в самом начале: Код #if scmRTOS_CONTEXT_SWITCH_SCHEME == 0 #define OS_INTERRUPT __arm #else #define OS_INTERRUPT __arm __irq #endif
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 11 2008, 10:03
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата(Сергей Борщ @ Jan 10 2008, 15:36)  Насчет #define проверю. По поводу перезагрузки - посмотрите, сколько стека выделяется для scmRTOS_IDLE_PROCESS_STACK_SIZE в файле scmRTOS_config.h Раньше там выделялось только то, что хочет пользователь для своих нужд и "в недрах" к этому числу добавлялось 17 * sizeof(TStackItem). Теперь надо полный размер указывать в scmRTOS_config.h, т.е. минимум 17 * sizeof(TStackItem) Но оно там есть, в самом начале: Код #if scmRTOS_CONTEXT_SWITCH_SCHEME == 0 #define OS_INTERRUPT __arm #else #define OS_INTERRUPT __arm __irq #endif Да, действительно есть, я просто файл не скопировал (svn воспользовать не получается, перекрыта на работе).Скачивал файлы в ручную по приведенной dxp ссылке Сейчас гоняю приведенный пример 1-EventFlag. Там же не нужно ничего исправлять, кроме пина и порта светодиода? Поведение такое же. Чип перезагружается. Может я что-то недозаменил снова, но что-то сомневаюсь. Для этого примера #define scmRTOS_IDLE_PROCESS_STACK_SIZE 17 * sizeof(TStackItem) Мой пример (всего 1 процесс, ожидающий событие Timer_Ovf ( Timer_Ovf.Wait(); ) и раз в секунду в прерывании от ТС0 сигнализируется событие ( Timer_Ovf.SignalISR(); ) ) отваливался после команды Timer_Ovf.SignalISR(), выполнив ещё что-то. Т.е.: Код .......... if (TimerCounter0) { TimerCounter0--; if (!TimerCounter0) { TimerCounter0=50000; Timer_Ovf.SignalISR(); // доходит до этой строчки, затем доходит до строки " выход из // прерывания" и где-то там чип перегружается. Если события не происходит, то всё работает. } } AT91C_BASE_AIC->AIC_EOICR = 0;
} // выход из прерывания. Что удивительно, примеры с предыдущими исходниками ОС работают стабильно.
|
|
|
|
|
Jan 11 2008, 11:20
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(LessNik @ Jan 11 2008, 12:03)  Что удивительно, примеры с предыдущими исходниками ОС работают стабильно.  Буду копать. Я примеры из последней правки проверял, вроде все работали. Попробую еще раз скачать все из репа "на чистый лист". Я писал себе файлик с изменениями, которые вносились в процессе правки, но он, к сожалению, дома. Постараюсь вечерком его найти и запостить сюда. Могу выслать почтой выкачанные из репа примеры. P.S. Проверил первый пример - слил из репа, скомпилил, залил - работает и из ОЗУ и из флеша. Тестировал на SAM7S64.
Прикрепленные файлы
sam7s.zip ( 100.54 килобайт )
Кол-во скачиваний: 105
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
LessNik scmRTOS. Порт под AT91SAM7X Jan 9 2008, 12:23 Waso Пересаживаюсь с FreeRTOS на scmRTOS. Проц AT91SAM7... Jun 18 2008, 08:41 Сергей Борщ Цитата(Waso @ Jun 18 2008, 11:41) КодLoad... Jun 18 2008, 14:33 Waso C макросом я пока париться не стал.
А со стеком во... Jun 19 2008, 07:31 Сергей Борщ Цитата(Waso @ Jun 19 2008, 10:31) Как я п... Jun 19 2008, 08:20 Waso Скажите, а у вас стек ниспадающий чтоле? 0_о Запол... Jun 20 2008, 08:28 Сергей Борщ Цитата(Waso @ Jun 20 2008, 11:28) Скажите... Jun 20 2008, 09:02 Waso Ясно. Незнал, простите. Вобщем теперь реализация т... Jun 20 2008, 09:32 Waso После ручного сброса или сьема/подачи питания пере... Jun 23 2008, 08:43 Сергей Борщ Цитата(Waso @ Jun 23 2008, 11:43) После р... Jun 23 2008, 09:52 Waso Дописал в инициализацию
AT91C_BASE_PMC->PMC_PC... Jun 23 2008, 11:14 Сергей Борщ Цитата(Waso @ Jun 23 2008, 14:14) Дописал... Jun 28 2008, 12:51
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|