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 DEC
ONCENTRAÇÃO EMS
ISTEMAS EC
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.
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).
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 ) );
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">
<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>