ÁREA DE CONCENTRAÇÃO EM SISTEMAS E CONTROLE - PG-EEC/S

Texto

(1)

INSTITUTO TECNOLÓGICO DE AERONÁUTICA

CURSO DE PÓS-GRADUAÇÃO EM ENGENHARIA ELETRÔNICA E COMPUTAÇÃO

DIVISÃO DE ENGENHARIA ELETRÔNICA - IEE

Á

REA DE

C

ONCENTRAÇÃO EM

S

ISTEMAS E

C

ONTROLE

- PG-EEC/S

EA-254/2007 – Microcontroladores e Sistemas Embarcados

Aula 12 - Série de Exercícios IX

Programação de Sistemas em Tempo Real usando eRTOS

Uso do Java

(Programas 13)

Prof.: Wagner Chiepa Cunha

Prof.: Cairo Lúcio Nascimento Júnior

Alunos: José Raimundo dos Santos Fonseca Filho

Tarefa 1:

Estude e entenda o programa eRTOS\projects\java\javaserv.c. Estude os arquivos

auxiliares em eRTOS\projects\java\web. Compile e execute o programa javaserv.c.

Tarefa 2:

Escreva um relatório explicando o funcionamento do programa.

Consulte o manual do eRTOS, pág. 17.

(2)

Programa 12

A) Finalidade.

O programa avaliado é gera números aleatoriamente, a cada vez que uma solicitação

de página ao servidor http é efetuada. Usando SSI e um um formulário com o campo relativo

ao número gerado (

##RandValue##

), o programa permite que uma classe java use estas

informações para mostrar colunas de diferentes cores e tamanhos proporcionais ao valor

aleatório gerado.

B) Estrutura do programa.

A função principal (main) cria cinco threads que serão responsáveis pelo atendimento

às solicitações http, todas associadas ao procedimento user_proc.

user_proc tenta abrir o arquivo (formulário) solicitado na barra de endereços do

browser. De acordo com o nome, caso exista, o procedimento abre o arquivo e o imprime no

browser. Caso seja encontrado algum campo a ser calculado, user_proc transfere a tarefa a

um dos procedimentos associados na lista de ssi's armazenada em

static ssi_type ssi_list[].

Neste

programa, apenas uma associação foi bastante

{ "RandValue", RandValue }

.

Quando o campo ##RandValue## é encontrado, o procedimento RandValue é

invocado, e gerando um valor aleatório a ser escrito no browser.

Do lado do “cliente”, uma applet java trata as informações recebidas tal que seja

exibidas cinco colunas, como anteriormente descrito.

A applet java é para o HTML uma TAG customizada, cuja execução é garantida pela

existência de uma associação no browser à máquina virtual java (JVM) instalada no PC do

usuário. A JVM é o “sistema operacional” em que as classes java, recebidas pelo browser, são

executadas. No caso deste programa, a classe chart, disponível no arquivo chart.cla, é que

garante a execução da applet usada no formulário html.

C) Resultados.

Ao ser carregada, a página mostra as colunas acima mencionadas. Como a classe chart

gera um valor aleatório, as colunas mostradas aparecerão com tamanhos variados, a cada vez

que a applet for executada (vide figura abaixo).

(3)

Figura – página usando applet chart

Listagem do módulo cliente do programa 13.

/*

* javaserv.c web server with Server Side Includes to generate * dynamic content, and a Java client side

* chart program to display the results * See the files in .\web

* */ #include <stdlib.h> #include <rtos.h> #include <net.h> #include <stdio.h> #include <ctype.h> #include <string.h> #include <time.h> #include <httpd.h> #include <mem.h>

void RandValue( tcp_Socket *s, stringlist *unused ) {

char buffer[64];

sprintf( buffer, "%lu", (rand() * 25L) / RAND_MAX ); sock_write( s, buffer, strlen( buffer ) );

(4)

static ssi_type ssi_list[] = { { "RandValue", RandValue }, { NULL, NULL }

};

/*********************************************************************** * - the web server calls this proc for each web request * * - it is called in the context of *one* of the HTTPD threads, * * though which is not known or important *

* - multiple threads may be in the same proc at the same time * ***********************************************************************/ void user_proc( tcp_Socket *s, char *cmd, char *file, char *ext, stringlist *cookies )

{

/* prepare output */

if ( !stricmp( file, "/" )) {

sock_puts( s, "Content-Type: text/html");

http_shtml( s, "web", "index","sht", ssi_list, cookies ); } else if ( !stricmp( ext, "sht" )) {

sock_puts( s, "Content-Type: text/html"); http_shtml( s, "web", file, ext, ssi_list, cookies ); } else {

sock_puts( s, "Content-Type: application/octet-stream\r\n"); http_dump( s, "web", file, ext );

} } main() { int i; randomize(); kdebug = 1; rt_init(100);

sock_init(); /* initialize network */ cputs("starting...\r\n");

#define MAXHTTPD 5

for ( i = 0 ; i < MAXHTTPD; ++i )

rt_newthread( httpdthread, (DWORD)&user_proc, 4096, 0, "httpd worker" ); do { /* nothing */ rt_yield(); } while ( 1 ); } Formulário usado: <html> <head><title>Bar Chart</title> </head> <body>

<h1>Java Based Bar Charts</h1> <hr>

<center>

<applet code="Chart.class" width=251 height=125> <param name=title value="Random Values">

(5)

<param name=columns value="5">

<param name=orientation value="horizontal"> <param name=scale value="5">

<param name=c1_label value="Project A"> <param name=c1 value="##RandValue##"> <param name=c1_color value="red"> <param name=c1_style value="solid"> <param name=c2_label value="Project B"> <param name=c2 value="##RandValue##"> <param name=c2_color value="green"> <param name=c2_style value="solid"> <param name=c3_label value="Project C"> <param name=c3 value="##RandValue##"> <param name=c3_color value="blue"> <param name=c3_style value="solid"> <param name=c4_label value="Project D"> <param name=c4 value="##RandValue##"> <param name=c4_color value="yellow"> <param name=c4_style value="solid"> <param name=c5_label value="Project E"> <param name=c5 value="##RandValue##"> <param name=c5_color value="cyan"> <param name=c5_style value="solid"> </applet>

</center> <hr>

<p>Java Author: Sami Shaio of Sun Microsystems</p>

<p>This example program uses a web page with server-side-includes to generate random numbers. It also includes a Java client program which takes those numbers and graphs them.</P>

</body> </html>

Imagem

Referências

temas relacionados :