Lab. Microprocessadores PCS2031 Curso Cooperativo prof. Jorge Kinoshita. 2. quadrimestre 2011. Esse calendário contém as datas referentes das aulas para as turma de quinta-feira. no dia seguinte. Aulas turma1: Quinta 8:20-12:00H, turma2: Quinta 14:00-17:40H Aulas 1. 12/5 2. 19 3. 26 4. 2/6 5. 9 6. 16 -. 23 * Feriado 7. 30 8. 7/7 9. 14 10. 21 11. 28 12. 4/8 13. 11 14. 18 1. Introducao a microprocessadores, com ênfase ao ARM. referência: ARM Laboratory Exercises, cap. 1 www.ee.ic.ac.uk/t.clarke/arch/lectures/Part1.ppt www.ee.ic.ac.uk/t.clarke/arch/lectures/Part2.ppt 2. Programming Basics (cap2) + Data Processing Operations (cap3). 3*. Data Processing Operations (cap3). 4*. Loads and Stores (cap4) 5*. Conditional Executiong Loops (cap5). 6*. Subroutines (cap6) 7. Subroutines (cap6) 8. Memory Mapped Peripherals (cap7). www.ee.ic.ac.uk/t.clarke/arch/lectures/Part3.ppt 9. excessoes seguindo a partir de 7.5.12, interrupcao de botao. http://www.pcs.usp.br/~jkinoshi/2011/apostila-interrupcao-arm-marcelo.pdf 10. Semihosting (cap10) Obs: a apostila nao contem detalhes do semihosting. Serah necessario pesquisar a respeito das SWI que lidam com arquivos em: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/CHDJHHDI.html http://balau82.wordpress.com/2010/11/04/qemu-arm-semihosting/ 11. C compiler + assembler - juntar C com assembly. -> escreva um programa em C que usa uma rotina em assembly. 1. O professor passou segment.c, segment.h. Gere o arquivo segment.o e execute no kit. Veja que aparece um numero no display. Note que segment.c imprime o numero no main. 2. crie a funcao imprime em segment.c que recebe um numero e coloca esse numero no display. Para isso basta retirar do main a parte pertinente. Compile e teste. 3. crie o arquivo imprime.c com a funcao imprime gerada no item anterior. O codigo executavel eh gerado atraves de: arm-elf-gcc -g imprime.c segment.c -o segment.o; teste o codigo gerado. 4. compile imprime.c gerando seu objeto: arm-elf-gcc -S impime.c (gerando imprime.s). Refaca o codigo usando imprime.s + segment.c. Teste. 5. Estude o codigo imprime.s. Como o numero eh passado como parametro? Altere imprime.s para usar o semihosting e imprimir o numero no PC ao inves de imprimir no display. 6. Agora que voce conhece imprime.s e imprime.c; altere imprime.c para se colocar codigo assembly dentro do codigo C usando o inline. 7. Altere imprime em imprime.c para que imprima 7 numeros de 1 a 7 (sem usar assembly no inline). Gere o codigo imprime.s. Estude como o fp (frame pointer) eh usado para marcar uma posicao na pilha empilhando parametros e variaveis locais. Apresente no relatorio como a pilha e o fp estao sendo usados. 12. Chaveamento entre 2 processos: usando o código que acompanhou o CD da placa, faze-lo rodar no gnuarm. A ordem com que se compila deve ser colocando o arquivo que contém o entrypoint primeiro. a) coloque um breakpoint dentro da rotina de interrupção e observe como os registradores são armazenados na pcb; em particular observe o registrador de status (como a rotina de interrupção acessa o registrador de status do processo? veja cpsr e spsr) e o program counter. Examine a troca de registradores por duas interrupções. b) Altere o código para que a tabela de processos seja declarada em C e não mais em assembly. Sugestão: declare a tabela de processos como uma array e de forma semelhante a semphore. Rode novamente o código. c) O botão gera uma interrupção. Altere o código para que o chaveamento de processos ocorra na interrupção de botão ao invés do timer. d) Altere o código para que 3 processos rodem simultaneamente ao invés de 2. Declare mais um processo, de tal forma que ele apenas troque o estado (aceso ou apagado) do led 1. Rode novamente o código com 3 processos. e) Altere o código para que 4 processos rodem simuntaneamente: cada um piscando um led. Porém crie o código de tal forma que seja fácil declarar N processos quaisquer tendo uma pcb de N*68 bytes. 13,14. Projeto livre: Idéias: gnuarm + qemu + interrupcao de timer: 1. chaveamento de dois processos; 2. timer; apostilas experiencia sobre timer; ou apostila sobre interrupcao 19/8 Avaliacao: (E1+E2+2*E3+2*E4+2*E5+2*E6+3*E7+2*E8+3*E9+E10+2*E11+2*E12+5*E13)/28 1 2 4 6 8 10 13 15 18 19 21 23 28 Avaliação por experiência: - Penalidade = -1 por atraso de 15 minutos - Penalidade = -4 por atraso de 1 hora. Ao término de cada experiência enviar código para o professor. * Algumas experiencias (3,4 ...) terao provinha surpresa (geralmente no comeco da aula) que valem 4 pontos em 10 da experiencia total. Referências: 1) ARM Laboratory Exercises - apostila - http://courses.cs.tamu.edu/rabi/cpsc617/resources/ARM%20Lab%20Mannual.pdf 2) ARM Assembly Language Fundamentals and Techniques, William Hohl, CRC Press 3) ARM System-on-Chip Architecture (2nd Edition), Steve Furber 4) ARM System Developer’s Guide Designing and Optimizing System Software; Andrew N. Sloss, Dominic Symes, Chris Wright; Elsevier 5) KinOS: http://code.google.com/p/arm7linux/downloads/list 6) Projeto do Alison, Guilherme, Keila coop10 de pcs2031.