Raciocionio sobre nibles.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 30 Nov 2016 12:42

Olá, fabin


Obrigado pela excelente explicação.

Meu, minha cuca já tá ficando cuzinhada com as "novidades" desse tal "C"...avi, mais ainda com essa tal de declaração dentro ou fora das rotinas, global ou local!

Obrigado, eu entendi perfeitamente e já até testei na prática e só corrigindo: O numeral é em hex 0x1234, eu mencionei no texto, DECIMAL 1234...
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Maffeis » 30 Nov 2016 14:55

salva um valor na ram sempre envolve mais de uma instrução em ASM

Se a interrupção ocorre no meio dessas instruções o valor pode ser perdido

salvei 0xFF no registrador
movi o registrador para RAM
RAM tem o Valor de 0xFF

Por exemplo

se a interrupção ocorre no meio dessas instruções (Muito azar)

salvei 0xff no registrador
interrupção
Salva o contexto
trata interrupção
salva 0x00 no registrador
movi registrador para RAM
Portanto a RAM é 0x00 (Por causa da Interrupção)
Fim da interrupção (Volta o contexto)
movi registrador para RAM
Novo valor da RAM é 0xFF (O valor 0x00 é perdido)

quanto mais variáveis globais tiver maior a chance de acontecer
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 30 Nov 2016 22:58

maffeis, se isso realmente é verdadeiro, então existe um BUGÂO no mikroc, acreditando que estamos falando desse compilador.

Em assembler com o compilador da microchipa, a regra é, "termine de executar a instrução e após isso, vá para a interrupção". :shock:

Bom na minha humilde opinião de "amador" em linguagem C, se isso ocorre, e o fato da indicação (para não dizer obrigação) de se utilizar variaveis locais, limitando-se com ressalvas ao uso de globais, para mim cheira "gambiarra" de compilador. Será que isso se aplica a todo tipo de compilador, tipo, ao um keeil, iar, etc....Mais profissionais.

Bom, de uma coisa aprendi até agora! Devo estudar com cautela e muita atenção, me robustecer de muita teoria e analisar muito bem as entrelinhas, como nesse caso.

Obrigado a todos.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor fabim » 01 Dez 2016 08:21

A arquitetura MIPs, ARM, entre outras. Possui o modo de execução tipo load-store.
Entre estas duas execuções via hardware, por causa da estrutura da maquina, não é possível existir interrupção de qualquer tipo.
https://en.wikipedia.org/wiki/Classic_RISC_pipeline (lembrando que o pipeline do pic é de 4 níveis).

O que ocorre, erroneamente interpretado por iniciantes é que se ele estiver em uma parte do código prestes a executar um teste para saber se é maior ou menor que, e ocorrer uma interrupção e dentro desta
não existir um cache do "status", dentro da interrupção qualquer instrução de movimento de dados vai alterar o seu valor.
Por este motivo, ao entrar na interrupção é necessário mover o status e o registro de load_store para registradores temporários, e ao final da interrupção antes do retfie fazer a carga novamente destes em seus respectivos.

A única instrução que não altera o status é o swap, então fica mais ou menos assim (faz muito tempo que não uso assembly) se eu indicar algo errado, me corrijam por favor.

ORG 0x04
swap status, cache_temporario_status
movf cache_regload_temporario, w
{

código

}
movfw cache_regload_temporario
swap cache_temporario_status, status
retfie

vlw
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x