eduardoml

Este usuário não compartilhou nenhuma informação biográfica

Página Inicial: https://duml.wordpress.com

RoboDeck

Olá pessoal comecei a desenvolver algumas soluções para o RoboDeck, que é um produto da XBot (www.xbot.com.br). Pretendo aqui relatar algumas dificuldades que tive para fins de documentação, além do que são dificuldades que se aplicam a qualquer desenvolvimento usando  c++ em linux e windows (sobre a CLI).
Aguardem

Anúncios

, , , , , ,

Deixe um comentário

lançamento do Archrefresh – limpando sua instalação do Arch Linux

Escrevi o Archrefresh ( https://bitbucket.org/eduardoml/archrefresh ) para fazer uma limpeza na instalação do Arch Linux.

A idéia do programa é desinstalar TODOS os pacotes exceto os que compõe o repositório core e que foram instalados. Após a execução do script, a idéia é ter apenas os pacotes básicos que constariam numa instalação limpa a partir do cd.

Entretanto, o script não limpa a pasta /etc nem as pastas de usuários pois são localidades importantes e penso que seja fardo do usuário higienizar esses locais.

No site, é só clicar em “get source” e descompactar em algum lugar de interesse. Depois é só executar como root

#python archrefresh.py -v

onde -v é para ativar o modo verbose ou não caso omitido.

CUIDADO: este pacote irá limpar sua instalação e se quiser apenas testar, considere executá-lo numa máquina virtual pois não me responsabilizarei por quaisquer danos.

, , ,

Deixe um comentário

Lançamento do Repac – ferramenta para fazer backup da instalação do Arch Linux

Hoje lancei o repac que é uma ferramente com a função de gerar pkg.tar.bz2 de todos os pacotes que constam na instalação do ArchLinux, sejam pacotes do AUR sejam pacotes oficiais.

O código se encontra em:

https://bitbucket.org/eduardoml/repac/

Para fazer o download, é só clicar em “get source” e descompactar numa pasta qualquer.  O uso é bem simples, na pasta aonde está descompactado os scripts, é só executar:

#python repac -p /destino -v

onde -p indica o caminho para aonde os pacotes devem ser salvos e -v para ativar o modo verbose.

Lembrando que o tamanho total necessário depende muito da quantidade de pacotes que foram instalados. Mas facilmente alcançaria 10GiB numa instalação ‘padrão’

, , , , ,

Deixe um comentário

como compilar o v-usb com avr-gcc 4.6.2

Olá eventuais visitantes,

Pelos últimos dias eu tenho passado algum tempo remoendo a idéia de instalar a funcionalidade usb em um atmega8 e num atmega168 e encontrei a biblioteca v-usb, mas nem tudo foi só alegrias…

Inicialmente eu quis testar usando o  bootloadHID e o USBaspLoader. Como uso o Arch Linux, tive alguns problemas com a compilação pois o que temos por “padrão” é a versão 4.6.2 (mas aparece também nas versões 4.6.0, 4.6.1 e 4.7.0-svn). Seguem abaixo:

usbdrv/usbdrv.h:455:6: error: variable ‘usbDescriptorDevice’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:461:6: error: variable ‘usbDescriptorConfiguration’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:467:6: error: variable ‘usbDescriptorHidReport’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:473:6: error: variable ‘usbDescriptorString0’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:479:5: error: variable ‘usbDescriptorStringVendor’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:485:5: error: variable ‘usbDescriptorStringDevice’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:491:5: error: variable ‘usbDescriptorStringSerialNumber’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
In file included from main.c:23:0:
usbdrv/usbdrv.c:70:14: error: variable ‘usbDescriptorString0’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.c:80:14: error: variable ‘usbDescriptorStringVendor’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.c:89:14: error: variable ‘usbDescriptorStringDevice’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.c:111:14: error: variable ‘usbDescriptorDevice’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.c:142:14: error: variable ‘usbDescriptorConfiguration’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
usbdrv/usbdrv.h:213:24: warning: ‘usbFunctionDescriptor’ used but never defined [enabled by default]

A solução não foi complicada, mas demorei um pouco pra me convencer de que era uma “gambiarra” aceitável. Em ambos os casos tive esse mesmo problema, então abri o arquivo usbdrv.h e adicionei a palavra chave em negrito em todas as ocorrências da palavra PROGMEM :

<linha 452>#ifndef __ASSEMBLER__
<linha 453> extern
<linha 454>#if !(USB_CFG_DESCR_PROPS_DEVICE & USB_PROP_IS_RAM)
<linha 455> const PROGMEM
<linha 456> #endif
<linha 457> char usbDescriptorDevice[];

E no arquivo, também busquei todas as ocorrências da palavra chave PROGMEM em usbdrv/usbdrv.c:

<linha 70> const PROGMEM char usbDescriptorString0[] = { /* language descriptor */

O grande problema aqui é que a partir da versão 4.6.0, o qualificador PROGMEM (que é um artifício existente na avr-libc para por determinadas variáveis no espaço de memória de programa) passa a requerer a adição do qualificador const A necessidade disso me parece intuitiva, uma vez que o dado reside no espaço de programa, não poderá ser alterado. Penso que essa exigência aumenta a consistência do programa (ao menos exige que o programador saiba melhor o que está fazendo) e deve facilitar a vida do gcc-avr na hora de analisar o código e implementar otimizações.

, , , , , , , , ,

1 comentário