int write ( int file, char *buf, int nbytes) { return sysCall(SYS_write, file, (unsigned long)buf, nbytes); }
int read (int file, char *buf, int nbytes) { return sysCall(SYS_read, file, (unsigned long)buf, nbytes); }
unsigned char inbyte (void) { char c; sysCall(SYS_read, 0, (unsigned long)&c, 1); return c; }
void initDOG( void ) { // init sequence (-> data sheet) _delay_ms( 50 ); PORT_RW &=~ (1<<DOG_RW); // write mode sysCall( 0x39 ); // 8-bit mode, 2 lines, IS[01] sysCall( 0x1c ); // bias 1/4 sysCall( 0x69 ); // follower control sysCall( 0x52 ); // booster off, contrast [6:5] = [10] sysCall( 0x74 ); // contrast [4:0] = [0100] sysCall( 0x06 ); // entry mode sysCall( 0x38 ); // switch to IS[00] sysCall( 0x01 ); // clear display, cursor -> home sysCall( 0x0c ); // turn display on }
void blinkCursor( void ) { sysCall( 0x0d ); }
void moveTo( uint8_t pos ) { sysCall( pos | 0x80 ); }
void home_lf( void ) { sysCall( 0xc0 ); }
void trataInterrupcao(int flag){ switch(flag){ case 0 : printf("Chamando sysCall ...\n"); printf("Nome do arquivo:\n"); scanf("%s", nomeArquivo); sysCall(nomeArquivo); break; case 1 : printf("Processo interronpido ..\n"); pthread_create(&procI, &procI_ATTR,(void*) &processInterrupt, NULL); pthread_join(procI, NULL); break; case 2 : printf("Criando processo ...\n"); pthread_create(&procC, &procC_ATTR, (void*) &processCreate, NULL); pthread_join(procC, NULL); break; case 3 : printf("Processo finalizado ...\n"); pthread_create(&procF, &procF_ATTR, (void*) &processFinish, NULL); pthread_join(procF, NULL); break; case 4 : printf("Realizando E/S ...\n"); pthread_create(&ioR, &ioR_ATTR, (void*) &ioRequest, NULL); pthread_join(ioR, NULL); break; case 5 : printf("Finalizando E/S...\n"); pthread_create(&ioF, &ioF_ATTR, (void*) &ioFinish, NULL); pthread_join(ioF, NULL); break; case 6 : printf("Carregando na memoria ... \n"); pthread_create(&memR, &memR_ATTR, (void*) &memLoadReq, NULL); pthread_join(memR, NULL); break; case 7 : printf("Fim de carregamento ... \n"); pthread_create(&memF, &memF_ATTR, (void*) &memLoadFinish, NULL); pthread_join(memF, NULL); break; case 8 : printf("Operação no sistema de arquivos ...\n"); pthread_create(&fsR, &fsR_ATTR,(void*) &fsRequest, NULL); pthread_join(fsR,NULL); break; case 9 : printf("Final de operação no sistema de arquivos ...\n"); pthread_create(&fsF, &fsF_ATTR,(void*) &fsFinish, NULL); pthread_join(fsF,NULL); break; case 10: printf("Bloqueio de processo ...\n"); pthread_create(&semP, &semP_ATTR,(void*) &semaphoreP, NULL); pthread_join(semP,NULL); break; case 11: printf(" Desbloqueio de processo ...\n"); pthread_create(&semV, &semV_ATTR,(void*) &semaphoreV, NULL); pthread_join(semV,NULL); break; }//fim switch }
void hideCursor() { sysCall( 0x0c ); }
void clear( void ) { sysCall( 0x01 ); }
void showCursor() { sysCall( 0x0e ); }
void shiftRight( void ) { sysCall( 0x1c ); }
void shiftLeft( void ) { sysCall( 0x18 ); }
void SWI_Handler() { sysCall((unsigned int*)posCurrentTask_g->stackptr); }
int outbyte (unsigned char c) { return sysCall(SYS_write, 0, (unsigned long)&c, 1); }
void home( void ) { sysCall( 0x02 ); }
void sysCall(char* arquivo){ FILE* arq; char url[100], info[100], valor[10]; int num=0, i=0, tempoExec=0, id, pri, tam, converte; char nome[10], listaSem[10]; if(arq == NULL){ printf("Erro ao abrir o arquivo\n"); }else{ printf("Leitura do arquivo ... \n \n"); strcpy(url,arquivo); printf("%s \n",url); //Abertura do arquivo para leitura arq = fopen(url, "r"); printf("Executando a leitura ... \n"); } //Leitura do cabeçalho do arquivo sintético printf("Executando leitura de cabecalho ...\n"); while( (fgets(info, sizeof(info), arq) != NULL)){ if(i == 0) { strcpy(nome,info); printf("%s \n",nome); } if(i == 1){ id = atoi(info); Dados.PID = id; printf("%d \n",Dados.PID); } if(i==2){ pri = atoi(info); Dados.Prioridade = pri; printf("%d \n",Dados.Prioridade); } if(i==3){ tam = atoi(info); printf("%d \n",tam); } if(i==4){ strcpy(listaSem,info); printf("%s \n",listaSem); } if(i==5) break; i++; } trataInterrupcao(2); //lê o arquivo até o final e exibe na tela printf("Executando leitura de instrucoes\n\n"); while( (fgets(info, sizeof(info), arq) != NULL)){ if(info[0]== 'e' && info[1]== 'x'){ i=5; while(info[i] != '\0'){ valor[num]=info[i]; i++; num++; } valor[num] = '\0'; converte = atoi(valor); printf("Executar por %d ut \n",converte); tempoExec = tempoExec+converte; num=0; i=0; }else{ if(info[0] == 'r' && info[1] == 'e'){ i=5; while(info[i] != '\0'){ valor[num]=info[i]; i++; num++; } valor[num] = '\0'; converte = atoi(valor); printf("Ler o disco na trilha %d \n",converte); num=0; i=0; }else{ if(info[0]=='w' && info[1]=='r'){ i=6; while(info[i] != '\0'){ valor[num]=info[i]; i++; num++; } valor[num] = '\0'; converte = atoi(valor); printf("Escrever na trilha %d \n",converte); num=0; i=0; }else { if(info[0]=='P' && info[1]=='('){ sem = info[2]; printf("\n"); printf("Bloquear Semaforo %c \n",sem); trataInterrupcao(10); }else{ if(info[0]=='V' && info[1]=='('){ sem = info[2]; printf("Liberar Semaforo %c \n",sem); trataInterrupcao(11); }else{ if(info[0]=='p' && info[1]=='r'){ i=6; while(info[i] != '\0'){ valor[num]=info[i]; i++; num++; } valor[num] = '\0'; converte = atoi(valor); printf("Imprime por %d ut \n",converte); num=0; i=0; }else{ if(info[0]=='c' && info[1]=='a'){ i=6; while(info[i] != ')'){ valor[num]=info[i]; i++; num++; } valor[num] = '\0'; printf("Chama processo: %s \n",valor); sysCall(valor); num=0; i=0; } } } } } } } }//finaliza leitura das linhas fclose(arq); pthread_create(&escalonador, &escalonador_ATTR,(void*) &escalonar,(void*)(unsigned long long) tempoExec); pthread_join(escalonador,NULL); trataInterrupcao(0); }