Ir ao conteúdo

Programacao C em Pics


Sink00

Posts recomendados

Postado

Boa noite,

Eu tenho uma duvida basica. Eu nao pretendo que aconteca mas so para ficar ja preparado. O que acontece se ao programar um PIC em C você definir um tamanho de um vetor e durante a execucao no PIC você tentar escever e um ponto maior queo vetor? Por que numa execucao de um .exe gerado em C nao windows geraria um fatal error. Mas o que ocorre no PIC? Isso pode acarretar algum problema serio e permanente no PIC?

Obrigado!!

Abs

Postado

A linguagem C não checa índices de vetores.

Se você escrever em uma posição fora da faixa, qualquer coisa indeterminada pode acontecer. O que vai acontecer? Não sei! Mas, não vai ser coisa boa!

Pode estragar o integrado? Não sei! Talvez! (acredito que não, mas nunca se sabe). Depende do que está conectado aos seus pinos, e depende de aonde é que o programa vai escrever seus dados, que foram indexados de forma errônea!

No mínimo é o programa dar falhas. O programa entrar em crash... Travar! etc, etc...

Escrever fora da faixa, é FALHA GRAVE do programador!

Todo cuidado é pouco, quando se usa vetores e ponteiros, na linguagem C.

[]´s

  • Membro VIP
Postado

Reforçando a ideia do Maurício, dificilmente um erro de software causaria um dano num MCU..... a não ser que este erro interfira diretamente no hardware... ou seja, se uma entrada de repente mudar para saída e nesta esteja entrando uma tensão com corrente suficiente para danificá-la , afinal, deveria ser entrada.

Postado

Complementando, em linguagem C é muito mais difícil cometer estes erros, pois trata-se de uma linguagem de alto nível e muitas rotinas de segurança acabam diminuindo o risco.

O maior problema de vetores é se você apontar para o endereço de memória de programa, pois este irá tentar alterar algum trecho do código em tempo de execução. Acredito que não há como afirmar o que pode acontecer, pois irá depender do que será modificado, mas acredito que se você alterar algum código dentro da região onde se encontra o código do programa, o PIC irá travar. Se o vetor aporntar para a memória de dados não tem problema e caso aponte para a região da memória de programa onde não há dados do código do programa, ele continuará funcionando normalmente.

Este erro é muito difícil acontecer, acho que é mais fácil dar estouro de pilha. E quando um estouro de pilha ocorre, na família pic18, o vetor no topo da pilha não é alterado, então para um retorno da função chamada cai no vetor errado ai o programa pode apresentar problemas.

Postado

A linguagem C não tem nenhum mecanismo de controle de segurança. Por causa da própria filosofia da linguagem.

Cometer os erros que o colega Sink00 citou, é fácil e extremamente simples. Basta querer! :D

Acredito eu, que você deva ter confundido C com Basic, ou talvez com Pascal, porque, a forma como C aloca espaço para as variáveis, mostra que fazer bobagens, é altamente plausível!

Alguns compiladores (compiladores) implementam métodos de verificação dessas ocorrências, mas, a linguagem ANSI C em específico, não toma conhecimento de nenhum desses detalhes!

E pelo que eu entendí da sua postagem, o PIC tem a capacidade de alterar código gravado na Flash em tempo de execução? É isso mesmo que eu entendí? Ou, me enganei? Mas, a arquitetura do PIC não é Harvard? O PIC tem instruções para gravar flash em tempo de execução? Se eu já não gostava da máquina, agora, você ajudou a piorar e muito esse sentimento. Valeu! :lol:

Só pra testes, os dois programas abaixo compilaram. No Keil (8051), com mensagens de Warnings e no CodeVision (AVR), sem problema nenhum. Se rodar esses programas, com o código gravado no MCU, talvez não aconteça nada... Talvez aconteça tudo! Isso só depende da sua boa-estrela.



char vetor [ 10 ];

void maind ( void )
{
unsigned char contador = 0;

for ( contador = 0; contador < 50; contador++ )
{
vetor [ contador ] = contador;
}

while ( 1 );
}
#include <reg52.h>



char vetor [ 10 ];

void main(void)
{
unsigned char contador = 0;

for ( contador = 0; contador < 50; contador++ )
{
vetor [ contador ] = contador;
}

while (1);
}
#include <mega16.h>

[]´s

Postado

Ok era so uma duvida mesmo pois eu pretendo colocar mecanismos de segurança para isso nao ocorrer, mas era uma oa saber né. E porjetPIC, como o mauricio falou, e isso eu tenho plena certeza, em C isso é muito fácil ocorrer e eu ja o fiz muitas vezes quando programo em C. No computador nao da problema pro que o SO, pelo menos os comerciais como Windows tem sistemas de segurança. Mas se você quisesse voce poderia zerar a memoria do seu comp so com um programinha mexendo com vetores em C. porque os vetores em C nadamais sao que um monte de ponteiros. Mas era essa minha duvida na MCU hehe. E aproveitando o Topico eu vou contar o qpor que dessa pergunta.

Como ja descrito m muitos outros topiocs :D eu estou tentando montar um equipamento de leitura EMG para ser visualizado no computador. A comunicaçao que eu estou utilizando é via USB. porém USB tem serios problmas com cadencia de dados por isso eu vou utiizar os 64kB disponiveis ( no caso de HID com interupt) para poder melhorar a resolução porém existe um grande problema. A falta no determinismo do tempo entre as mensagens do PIC com o computador. Isso nao é algo fácil de se controlar principalmente por causa do CLient no Computador. Por isso eu estava pensando em escrever algo como o computador manda uma mensagem para o PIC mandando ele entrar num estado de leitura continua do ADC com um intervalo predeterminado. E ele vai gravando na memoria RAM essas leiuras ate que o computador pede essas leituras. Quando o computador pede as leitiras, no primeiro byte ele coloca um numero de confirmaçao, no segundo um numero representando o numero de leituras que ele esta passando e nos outros espaços as leituras ate então feita. Com isso ele zera a contagem de leituras e recomeca ate o computador pedir de novo. Esse é o unico modo que eu encontri para a distancia temporal entre as leituras ser sempre constante. O que va mudar é o nuemro de leituras que ele vai passar para o computador de acordo com tempo que ele demorou para requisitar os dados. So que o meu problea é: se o computador der algum problema a ponto de demorar tanto que o PIC preenche o vetor de armazenamento de dados.

Se alguem tiver alguma ideia de como fazer isso de um modo melhor eu agradeço. O codigo para o que eu descrevi em C é bem fácil, se quiser para uma visualizacao mais pratica eu posto aqui. Por favor nao me falem para fazerem assim: o computador da um request, dai o pic le os dados e nessa resposta ele devolve os dados. Esse modo nao funciona porque afinal o PIC vai ficar parado por um tempo ate o computador pedir os dados de novo o que ja quebra a ideia.

Vlew pela ajuda!!

Abs

Postado

Boa tarde Maurício,

Eu estava me referindo a linguagem C voltada para microcontroladores, existem muitos compiladores de linguagem C para PIC, por exemplo, temos o CCS, IAR, MPLAB C18, C30, C32, entre outros. Dependendo do compilador, no momento em que se compila, os problemas mais comuns são indicados em warnings ou errors. Quando estava me referindo a segurança, eu estava referindo aos warnings e errors, pois querendo ou não, você acabará averiguando qual é a fonte do problema que o compilador está acusando. Desta forma é muito difícil cometer esses tipos de erros em C, se comparado com Assembler.

A arquitetura do PIC é harvard e já vi alguns projetos onde os programadores modificam os conteúdos da Flash durante a execução do código. Não vejo como desvantagem, pois permite uma maior flexibilidade no desenvolvimento dos programas. Imagine que você esteja usando a EEPROM interna para uma determinada aplicação, cuja modificação dos conteúdos ocorrem em um período de 1 vez por dia e na mesma aplicação fosse necessário armazenar alguns dados a cada duas semanas e a quantidade de dados fosse maior que o espaço da EEPROM. Desta forma com o PIC podemos armazenar os dados na Flash e de preferência nos últimos endereços, desta forma economizamos componentes externos e diminuimos o custo.

Gostaria de salientar que é o meu ponto de vista, posso estar errado, por isso resolvi participar deste fórum. Trabalho com PICs a vários anos e continuo aprendendo todos os dias.

Quanto a arquitetura harvard, com toda sinceridade me fez pensar, como pode gravar na flash sendo que esta usando um barramento de programa. Boa pergunta, mas funciona. ehhehehe. :D

Vim aqui na paz, então vamos discutir nua boa.

Postado

Opa! Sem crise! Num tamo aqui pra brigar, não! Estamos aqui pra tentar ajudar, e aprender, tb! Só coloquei minha opinião sobre o que eu conheço da linguagem C.

Como a linguagem é padrão pra todas as máquinas, uma barbeiragem que acontece com uma, teoricamente, deve acontecer com outra.

você mesmo ajudou a reforçar o que eu falei, quando eu disse que ALGUNS COMPILADORES tem esse mecanismo de defesa. Mas, nem isso pode ser chamado de mecanismo de defesa, uma vez que alertas não impedem a compilação e muito menos a execução do programa. Eles tão lá, só pra te alertar, como aconteceu na compilação do programa usando o compilador Keil. Ele alertou! Mas eu, ignorei! Isso, é uma característica do compilador. Não é da linguagem e nem é do sistema operacional. Esses testes que eu postei, foram só uma brincadeirinha, pra mostrar que realmente a linguagem permite fazer qualquer tipo de besteira que se queira! Em um programa sério, provavelmente seu programa teria ido pro espaço! Isso, sendo bastante otimista! :lol:

Já pensou se isso acontece em uma máquina de assistência à vida? UOU!!!!

Eu não conheço PICs. Não programo e não gosto! Mas, realmente, saber que se pode escrever na memória de programa da máquina, em tempo de execução, me deixou de cabelo em pé, ou seja, eu pessoalmente ficaria bastante preocupado em saber que a máquina pode alterar o meu programa na hora em que ela quiser, mas, esse, é o meu ponto de vista! :D

Tamos aí!

[]´s

Postado

Vamos com calma pessoal, escrever na flash do PIC é permitido sim, mas vale lembrar que se a secrita for feita durante a execução do codigo, apenas sera permitida escrita na flash a partir do que sobrou dessa memoria. confesso que não é la das melhores tecnologias do PIC.

abs.

Postado

Boa tarde Maurício,

Você tem razão, eu acabei falando do compilador e não da linguagem C padrão. Realmente os alertas são características do compilador e não da linguagem.

Uma pergunta, sempre achei que fosse uma vantagem a possibilidade de escrever na Flash, e pelo que percebo estou enganado.

Felipe, então quer dizer que se eu tentar alterar um código na memória Flash em tempo de execução e o endereço estiver dentro da região do programa, o PIC simplesmente irá ignorar o comando, em vez de travar? Um modo de evitar erros, pode ser o de acionar o write protect dos blocos utilizados pelo programa, o que acha desta solução?

Tipo, nunca tive problemas com o PIC, as fontes de problemas dos meus projetos era eu mesmo. :D

Postado

Fala, projetPIC.

Nesse caso de escrever na Flash, voltamos aquela questão de "ponto de vista".

Sem dúvida que, em uma máquina que possui limitados recursos, como são os MCUs, você ter uma posição à mais de memória, aparentemente, parece ser bem mais interessante do que uma outra máquina que não tenha. Mas, uma máquina que permite escrita em sua própria Flash, durante a execução do programa, tem que ser tratada com um pé atrás.

O Felipe disse que não tem problemas, etc e tal, porque a área é protegida e tal, mas, do pouco de computadores que eu conheço, se existe essa possibilidade, evidentemente que ela pode ser BURLADA.

Pois, é! Se por acaso você conseguir burlar, ou a própria máquina se confundir e burlar, e escrever um bit que seja dentro da área do seu programa, seu programa já era!

Uns podem achar isso uma vantagem. Outros, podem achar uma barbaridade. Eu, pessoalmente acho uma barbaridade! Mas esse, é o meu ponto de vista! :lol:

Se até agora você não teve problemas, o jeito é torcer pra que isso nunca aconteça.

É isso aí!

[]´s

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!