Я нашел PDF-файл, содержащий подробную информацию о Harmony-OS для того, чтобы мне пришлось использовать его для моего задания. Я легко подготовил описание / отчет. Но единственное, что мне осталось, это реализовать алгоритмов в Harmony-OS. Я нашел один подходящий. Кто-нибудь может мне помочь запустить этот ма c (пути в этой программе C ++) на windows машине для целей назначения? Вот код из PDF с небольшим вступлением.
ПРИЛОЖЕНИЕ A. ПРОГРАММА ОБРАЗЦОВ МНОГОЗАДАЧЕЙ Следующая программа представляет собой простую многозадачную программу, которая иллюстрирует многие идеи и примитивы, обсуждаемые в этом руководстве. В этом Приложении программа запускается только на процессоре 0. Функция main () - это функция root первой пользовательской задачи. Он создает сервер для терминала, подключенного к последовательному порту, и открывает соединение для ввода и вывода. Затем он создает дочернюю задачу и переходит в al oop, отправляя дочернюю задачу и распечатывая ответ и сопровождающий текст на выбранный терминал. Эта программа также иллюстрирует стратегию управления исходным кодом, которая обсуждается в Приложении E. Пример взят из / harmony / example / srtest / в дереве дистрибутива, и пара показанных файлов включения предназначена для версии программы для запуска на DY-4. Плата DVME-134 с процессором 68020. Программа должна быть скомпилирована на Macinto sh в операционной системе Ma c с использованием компилятора Consulair Ma c C. Следовательно, все пути записаны в синтаксисе Macinto sh. Есть два файла включения: один для внешних и один для кода. Сначала каждый файл включения компилируется, а затем объекты обоих связываются вместе с соответствующей версией системных библиотек. Подробные шаги, необходимые для создания библиотеки, описаны в Приложении № 007 [5]. После файлов включения находятся соответствующие включенные файлы.
#include "Master:harmony:sys:src:compiler:macc:compiler.h"
#include "Master:harmony:sys:src:sys.h"
#include "Master:harmony:sys:src:servers:tty:ttyinit.h"
#include "Master:harmony:sys:src:devices:mc68901:dvme134:m68901int.h"
#include "Master:harmony:example:srtest:src:templates.h"
#include "Master:harmony:example:srtest:src:dvme134:single:srtest0.c"
#include "Master:harmony:example:srtest:src:dvme134:ttyinit.c"
Master:harmony:example:srtest:inc:dy134cmac:single:code0.c
#include "Master:harmony:sys:src:compiler:macc:compiler.h"
#include "Master:harmony:sys:src:sys.h"
#include "Master:harmony:sys:src:servers:tty:ttyinit.h"
#include "Master:harmony:example:srtest:src:templates.h"
#include "Master:harmony:example:srtest:src:child.c"
#include "Master:harmony:example:srtest:src:main.c"
#include "Master:harmony:example:srtest:src:default:createand.c"
Master:harmony:example:srtest:src:templates.h
/*
* Global indices for task templates:
*
* Note that indices 1-3 are reserved:
* main 1
* _Directory 2
* _Gossip 3
*/
#define TTI 4
#define TTO 5
#define TTY 6
#define CHILD 10
31
Master:harmony:example:srtest:src:dvme134:single:srtest0.c
extern task main();
extern task _Directory();
extern task _Gossip();
extern task Child();
extern task _Tty_server();
extern task _SPi_mc68901();
extern task _SPo_mc68901();
extern void _Mc68901_int();
uint_32 _Pnumber = 0;
struct TASK_TEMPLATE _Template_list[] =
{
{ MAIN, main, 1000, 7 },
{ DIRECTORY, _Directory, 1000, 7 },
{ GOSSIP, _Gossip, 2000, 5 },
{ CHILD, Child, 1000, 6 },
{ TTY, _Tty_server, 2000, 5 },
{ TTI, _SPi_mc68901, 1000, 0 },
{ TTO, _SPo_mc68901, 800, 0 },
{ 0, 0 0, 0 }
};
struct INT_PAIR_Interrupt_list[] =
{
{ 5, _Mc68901_int },
{ 0, 0 }
};
Master:harmony:sys:src:servers:tty:ttyinit.h
/*
* Tty initialization messages
*/
typedef struct TTYI_PORT_INIT_REC
{ struct INIT_REC TTYI_HDR;
char TTYI_NAME[32]; /* server name */
uint_32 TT_DEV_GRP; /* device group this port is a member of */
uint_32 TT_GRP_MEMBER; /* member number in device group */
uint_32 TTI_DEV_CODE, /* input logical interrupt */
TTI_INDEX, /* input task template */
TTO_DEV_CODE, /* output logical interrupt */
TTO_INDEX, /* output task template */
TTETC_DEV_CODE, /* etc logical interrupt */
TTETC_INDEX; /* etc task template */
char *TTY_ADDR; /* I/O address of tty port */
uint_16 TTY_BAUD_RATE; /* baud rate, ignored for ports *
/* without soft baud select */
};
#define TTYIT_ALTNAME_INIT 1
#define TTYIT_PORT_INIT 2
32
Master:harmony:example:srtest:src:dvme134:ttyinit.c
The following are typical initialization values. This port also has the secondary name DEFAULT. The first
declaration is needed to satisfy compiler forward reference.
extern struct ALTNAME_INIT_REC Default_init;
struct TTYI_PORT_INIT_REC Tt0_init =
{
sizeof( struct TTYI_PORT_INIT_REC ), /* MSG_SIZE */
TTYIT_PORT_INIT, /* MSG_TYPE */
I_CAST(struct INIT_REC *)&Default_init, /* next initialization record */
"TEXT_TERMINAL:", /* tty server name */
0, /* no device group */
0, /* therefore no group member number */
RECV_0, /* tti device code */
TTI, /* tti template index */
XMIT_0, /* tto device code */
TTO, /* tto template index */
ETC_0, /* ttetc device code not used */
0, /* ttetc template index not used */
I_CAST(char *)MC68901_ADDR, /* I/O address of tty port */
9600 /* baud rate */
};
struct ALTNAME_INIT_REC Default_init =
{
sizeof( struct ALTNAME_INIT_REC ), /* MSG_SIZE */
TTYIT_ALTNAME_INIT, /* MSG_TYPE */
0, /* no more initialization records */
"DEFAULT:", /* tty server name */
};
Master:harmony:example:srtest:src:default:createand.c
void Create_and_open_tty()
{
extern struct TTYI_PORT_INIT_REC Tt0_init;
_Server_create( TTY, (struct INIT_REC *)&Tt0_init );
_Selectinput( _Open( "TEXT_TERMINAL: +r", 0 ) );
_Selectoutput( _Open( "TEXT_TERMINAL: +w", 0 ) );
}
Master:harmony:example:srtest:src:main.c
task main()
{
extern void Create_and_open_tty();
uint_32 n, limit;
uint_32 child;
struct STD_RQST request;
struct STD_RPLY reply;
Create_and_open_tty();
33
_Put_string( "Parent creates child.\n" );
_Flush();
if( ! (child = _Create( CHILD )) )
{
_Put_string( "*** Creation of CHILD failed.\n" );
_Flush();
}
limit = 100;
for(;;)
{
for( n = 0; n < limit; ++n )
{
request.MSG_SIZE = sizeof( request );
reply.MSG_SIZE = sizeof( reply );
if( ! _Send( (char *)&request, (char *)&reply, child ) )
_Put_string( "*** Send to child failed.\n" );
else
_Printf( "Child replied %i.\n", reply.RESULT );
}
_Put_string( "How many more message exchanges do you want? " );
_Flush();
limit = _Get_number();
while( _Get() != '\n' ) ;
}
};
Master:harmony:example:srtest:src:child.c
task Child()
{
uint_32 counter, requestor;
struct STD_RQST request;
struct STD_RPLY reply;
counter = 0;
for(;;)
{
request.MSG_SIZE = sizeof( request );
requestor = _Receive( (char *)&request, 0 );
reply.MSG_SIZE = sizeof( reply );
reply.RESULT = counter++;
_Reply( (char *)&reply, requestor );
}
};```