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

 
 
> scmRTOS 4.0 порт SoC CC2510 (MCU 8051)
a9d
сообщение Nov 11 2012, 02:18
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Эта версия еще не проверенна полностью. В ней могут содержаться ошибки.

Прикрепленный файл  IAR.zip ( 114.01 килобайт ) Кол-во скачиваний: 165



Реализовано только
#define scmRTOS_ISRW_TYPE TISRW
#define scmRTOS_CONTEXT_SWITCH_SCHEME 0


Версия IAR 8.10.4
Конфиги Debug (Release в конечном продукте доделаю)

Device: CC2510F32
Code model: Near
Data model: Large
XData Stack

Stack Idata size 0x10
Stack Xdata size 0x01F4 (можно меньше, один фиг после старта системы эта секция не используется)


Основной проблемой при портировании был стек. Здесь он поистине паскуден. Указатель 8битный, можно использовать только первые 256 байт и то первые 0x21(по умолчанию) байт используются в служебных целях. Итого доступно 223 байта. Да еще он растет в неправильную сторону.

За основу был взят порт для AVR. Т.к. он ближе всех по духу.
Используется раздельный стек.

Ввиду специфичности стека пришлось изменить шаблон процесса.
Создание процесса выглядит так
Код
//---------------------------------------------------------------------------
//
//      Process types
//
typedef OS::process<OS::pr0, 120> TProc1;
typedef OS::process<OS::pr1, 160> TProc2;
typedef OS::process<OS::pr2, 120> TProc3;

template<> void TProc1::exec();
template<> void TProc2::exec();
template<> void TProc3::exec();

//---------------------------------------------------------------------------
//
//      Process objects
//

__idata uint8_t r_stack0[32];
__idata uint8_t r_stack1[32];
__idata uint8_t r_stack2[32];
TProc1 Proc1((uint8_t)(&r_stack0));
TProc2 Proc2((uint8_t)(&r_stack1));
TProc3 Proc3((uint8_t)(&r_stack2));
//---------------------------------------------------------------------------


По другому я не знаю как выделить место в секции ISTACK. Это можно переделать?


Вторая проблема это адреса виртуальных регистров и их количество. А также количество банков.
Код
#define SPXH 0x11
#define SPXL 0x10

#define VB 0x20   //see lnk51ew_cc2510F32.xcl

#define V0  0x08
#define V1  0x09
#define V2  0x0A
#define V3  0x0B
#define V4  0x0C
#define V5  0x0D
#define V6  0x0E
#define V7  0x0F


Я не знаю как выдрать нужные дефайны из файла линковщика перед сборкой. Знаю только как заполучить нужную информацию во время работы.

В контексте сохраняются следующие регистры: IEN0,SPX,VB,V0..V7,R0,R1,R6,R7,PSW,B,SP,A,DPTR

Сохранение контекста нужно переделать. Только, что дошло как сохранить A и DPTR без использование стека.

Указатель SPX (софтварный стек iar) указывает на свободное место сразу за контекстом процесса. Это правильно ? Потестил на функциях с большим количество параметров и ничего не портилось.


ЗЫ: Походу для 8051 есть только две RTOS. Это FreeRTOS и ScmRTOS.

Сообщение отредактировал a9d - Nov 11 2012, 03:38
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 09:14
Рейтинг@Mail.ru


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