Next: Código-fonte: Exemplo de Utilização
Up: Códigos-fonte
Previous: Código-fonte: Exemplo de Utilização
2517:463294
/*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the License); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an AS IS basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the BananaKernel test implementation.
*
* The Initial Developer of the Original Code is the BananaKernel Developers
* Group. Portions created by BananaKernel are Copyright (C) 2004
* BananaKernel Developers Group. All Rights Reserved.
*
* Contributor(s):
*/
#ifdef SIMPLES
#include ../simples/bnnk.h
#else
#include ../intermediaria/bnnk.h
#endif /* SIMPLES */
/* Variaveis globais que conterao os processo */
BNNK_proc *funcao1;
BNNK_proc *funcao2;
/* Esta funcao imprime Funcao 1 - Hello World! na tela */
void
teste_03SC_funcao1teste_03SC_funcao1()
{
/* variaveis dentro dos processos devem ser STATIC */
static int i = 0;
for (i = 0; i < 10; i++) {
printf(Funcao 1 - Hello World!\n
);
#ifndef SIMPLES
bnnk_procstat();
#endif
if (!(setjmp(funcao1->contexto))) {
bnnk_swapproc();
}
}
printf(Funcao 1 - FIM\n
);
printf(Pressione qualquer tecla para continuar.\n
);
getchar();
bnnk_delproc(funcao1->descritor);
}
/* Esta funcao imprime Funcao 2 - Goodbye World! na tela */
void
teste_03SC_funcao2teste_03SC_funcao2()
{
/* variaveis dentro do processo devem ser STATIC */
static int i = 0;
for (i = 0; i < 10; i++) {
printf(Funcao 2 - Goodbye World!\n
);
#ifndef SIMPLES
bnnk_procstat();
#endif
if (!(setjmp(funcao2->contexto))) {
bnnk_swapproc();
}
}
printf(Funcao 2 - FIM\n
);
printf(Pressione qualquer tecla para continuar.\n
);
getchar();
bnnk_delproc(funcao2->descritor);
}
/*
* Esta funcao adicona os dois processos na lista de processos e chama o
* bnnk_swapproc para iniciar a execucao
*/
int
teste_03SCteste_03SC()
{
int funcao1_descritor = 0, funcao2_descritor = 0;
int i = 0;
funcao1 = (BNNK_proc *) bnnk_malloc(sizeof(BNNK_proc));
funcao2 = (BNNK_proc *) bnnk_malloc(sizeof(BNNK_proc));
/* prepara os processos com os enderecos corretos das funcoes */
funcao1->endereco = &teste_03SC_funcao1;
funcao2->endereco = &teste_03SC_funcao2;
#ifndef SIMPLES
/* temos diferencas nas prioridades */
funcao1->prioridade = -3;
funcao2->prioridade = 2;
#endif /* SIMPLES */
funcao1_descritor = bnnk_addproc(funcao1); /* chama bnnk_addproc()
* com a estrutura do
* processo contendo a
* funcao 1 */
printf(Pressione qualquer tecla para continuar.\n
);
getchar();
if (!funcao1_descritor) /* se nao incluiu o processo */
return -1; /* retorne -1 indicando um erro no
* bnnk_addproc() */
funcao2_descritor = bnnk_addproc(funcao2); /* chama bnnk_addproc()
* com a estrutura do
* processo contendo a
* funcao 2 */
if (!funcao2_descritor)
return -1; /* retorne -1 indicando um erro no
* bnnk_addproc( ) */
bnnk_procstat();
bnnk_swapproc(); /* aciona o escalonador */
return 0; /* retorna 0 indicando sucesso */
}
Next: Código-fonte: Exemplo de Utilização
Up: Códigos-fonte
Previous: Código-fonte: Exemplo de Utilização
rafael@safecore.net