LusoRobótica - Robótica em Português

Sistemas específicos => Outros Sistemas => Tópico iniciado por: Electropepper em 28 de Janeiro de 2015, 10:26

Título: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 10:26
Bom dia,
Gostava de saber se alguem vai seguir este curso, Embedded Systems - Shape The World (https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-02x#.VKmyTTj_THx).
Eu já comprei o material e tenciono seguir até ao fim, o ano passado começei mas encalhei a meio no lab10 se não me engano.
Se mais alguem estiver a seguir isto que se chegue á frente, podemos-nos ajudar uns aos outros aqui no forum.
LuísR.A. pelo menos tu sei que és fanático do TIVA  :P.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 11:01
Não me apetece andar a programar tudo por registos como é lá :p. Só programo em registos quando preciso mesmo por questões de velocidade.
Eu prefiro mesmo programar com o TivaWare, entendo que o curso é para aprender mas uma biblioteca como o TivaWare que é uma pequena camada de abstração ajuda muito a evitar erros e a criar código depressa sem problemas.

Gosto muito é das explicações sobre o hardware e lógica de programação desse curso


Tou a pensar talvez ver as aulas mais finais com LCD e tal. Ja tou inscrito
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 11:30
Não estou a perceber o que chamas de programar por registos, os registos são a unica maneira de configurar todo o hardware.
Já agora sabes como programar o tiva num ambiente linux ?
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: metRo_ em 28 de Janeiro de 2015, 11:34
Não estou a perceber o que chamas de programar por registos, os registos são a unica maneira de configurar todo o hardware.
Já agora sabes como programar o tiva num ambiente linux ?

Em vez de teres que fazer REGXPTOIO = 0x12; REGXPTOIODIR = 0x3D; fazes simplesmente GPIOCONFIG(1,OUTPUT). Algo deste genero. Eu ia dizer que os gpios nao sao um bom exemplo pois sao normalmente simples mas ate estes em certas arquitecturas podem ser complicados.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 11:40
Ok, já percebi estáva a pensar ao contrário.
Como venho do assembly normalmente gosto de ir aos registos para perceber o que se passa, depois fasso as minhas próprias funções, claro está demora muito mais tempo.
Tambem não gosto de trabalhar em windows o que dificulta um pouco, ainda gostava de descobrir um fabricante de CPUs arm mais linux friendly, para já uso o gcc-none-eabi.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 11:42
Tenho ideia que o CCS da Texas dá-se bem com o linux. É baseado no eclipse.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 11:53
Ok, já percebi estáva a pensar ao contrário.
Como venho do assembly normalmente gosto de ir aos registos para perceber o que se passa, depois fasso as minhas próprias funções, claro está demora muito mais tempo.

Como comecei com tipo Arduino e depois o primeiro processador com que sai disso foi um ARM prefiro usar sempre as bibliotecas de abstração dos periféricos.
Gosto de saber como tudo funciona para poder tirar melhor partido do processador mas gosto de usar as funções já feitas normalmente porque demora muito tempo faze-las eu, e ainda por cima as já feitas foram testadas por várias pessoas e é mais facil pedir ajuda quando algo corre mal.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 12:10
Mas neste curso tambem se usa muita biblioteca e usa-se o keil tambem, embora se trabalhe muito com registos, já tens muita coisa escondida que te poupa muito trabalho.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 12:18
Continuo a preferir esse curso pela informação toda que têm em vez dos exemplos de programação nas Labs :p
Tendo e sabendo usar o TivaWare achas que vale a pena aprender a usar essas bibliotecas?

É uma questão de escolher as armas que se quer usar
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 12:30
Sim, compreedo, e o tivaware é naturalmente direcionado para o Tiva deverá ter mais suporte e etc.
De qualquer maneira vou-te chatear se tiver problemas com isto  :P.
Talvez no fim do curso esperimente o tivaware.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 12:34
Sim, compreedo, e o tivaware é naturalmente direcionado para o Tiva deverá ter mais suporte e etc.
De qualquer maneira vou-te chatear se tiver problemas com isto  :P.
Talvez no fim do curso esperimente o tivaware.

Na boa ;)
Com o que puder pelo menos, ainda tenho muito a aprender sobre MCUs em geral.

Tenho isto para o TivaWare se quiseres ver a diferença :p
https://sites.google.com/site/luiselectronicprojects/tutorials/tiva-tutorials
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: senso em 28 de Janeiro de 2015, 14:07
O problema das bibliotecas é quase sempre o mesmo, mais código, mas cada vez menos se liga a isso, porque toneladas de flash é o standard, tambem pode ser preferência pessoal, eu a mim faz-me confusão essas coisas, prefiro ser eu a escrever directamente(ou o mais directamente possivel) nos registos.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: ivitro em 28 de Janeiro de 2015, 14:10
Mas estar a escrever directamente em registos de 32bits a probabilidade de erro é maior..


Podem ter o livro do curso aqui:
http://users.ece.utexas.edu/~valvano/Volume1/E-Book/ (http://users.ece.utexas.edu/~valvano/Volume1/E-Book/)
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 14:13

As funções tivaware vêm todas na ROM do Cortex-M4 por isso podes sempre poupar flash :p

As funções em geral são muito simples, são para abstração de hardware mas não fazem muito por si só. Algumas são apenas um assert dos parametros e depois um acesso ao registo com os parametros que são macros.

Com tanta flash sim, ao fim ao cabo só interessa em applicações que necessitem de velocidade porque tamanho de codigo não é um problema


Mas estar a escrever directamente em registos de 32bits a probabilidade de erro é maior..

A maior razão porque aconselho usar as bibliotecas mais basicas de abstração de hardware quando ainda por cima há tanta flash
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: senso em 28 de Janeiro de 2015, 14:19
Mas estar a escrever directamente em registos de 32bits a probabilidade de erro é maior..


Podem ter o livro do curso aqui:
http://users.ece.utexas.edu/~valvano/Volume1/E-Book/ (http://users.ece.utexas.edu/~valvano/Volume1/E-Book/)

Porque é que a probabilidade de erro é maior?
Calma eu não vou ao cumulo de escrever algo assim:
(APB2PERIPH_BASE + 0x2400) |= 0xFFEC01AD;

E esperar que não tenha metido o pé na poça, é o mesmo que um AVR(são só mais registos).

No meio de tanto IDE e sabor de ARM, quem me deixou fascinado foram mesmo os PSoC4 e 5, apesar de haver lá partes que acho meio vagas, mas mal lhe tenho pegado.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 14:31
Por acaso já pensei mexer nesse Psoc mas tava a pensar usar o IDE grafico. Mas sinceramente é preciso é ter calma. Agora ando a experimentar os STM32.

Senso eu se quiser uso o TivaWare para programar só com macros tambem! De forma a facilitar. É o que faço quando quero usar só registos.
Mas lembro-me de um vez que tive de desbloquear o micro com uma ferramenta, apagar tudo na flash... tava la algo mal. Com o TivaWare isso nunca me aconteceu



Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: StarRider em 28 de Janeiro de 2015, 14:33
Calma eu não vou ao cumulo de escrever algo assim:
(APB2PERIPH_BASE + 0x2400) |= 0xFFEC01AD;
 
Seria mais algo no género: *((uint32_t *) (APB2PERIPH_BASE + 0x2400)) |= 0xFFEC01AD

Abraços,
PA

Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: senso em 28 de Janeiro de 2015, 14:38
Woosh  ;D
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: LuísR.A. em 28 de Janeiro de 2015, 14:44
Calma eu não vou ao cumulo de escrever algo assim:
(APB2PERIPH_BASE + 0x2400) |= 0xFFEC01AD;
 
Seria mais algo no género: *((uint32_t *) (APB2PERIPH_BASE + 0x2400)) |= 0xFFEC01AD

Abraços,
PA



Precisa de levar um casting antes de ser usado como endereço? 
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: Electropepper em 28 de Janeiro de 2015, 14:59
Eu sou da mesma opinião que o senso, demasiada biblioteca ás vezes torna tudo mais confuso e ambiguo, por vezes mais dificil de debugar tambem.
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: StarRider em 28 de Janeiro de 2015, 15:19
A única vantagem que advém do uso de libs para aceder aos periféricos é que possibilita a portabilidade entre
MCUs da mesma família e do mesmo fabricante ... e claro que evita quem as usa tenha um conhecimento
mais profundo.

Por norma as Libs fornecidas pelos fabricantes (STM, NXP, TI, etc) têm um overhead estupidamente alto, os
tais assert's ás toneladas nas funções, o aumento dramático do código (e existem limitações de flash em
algumas situações), o próprio overhead da chamada da função e da pré-definição e preenchimento de
estruturas e variáveis antes da chamada à função da Lib, etc, etc.

Existem situações criticas em que simplesmente o recurso a função destas Libs é incomportável, como por
exemplo o uso dentro de rotinas que sirvam interrupções, e em situações em que existem timmings apertados.

Pessoalmente prefiro usar os registos, ou seja, as macros de definição dos mesmos que são fornecidas nos
includes específicos para para MCU, e neste caso a portabilidade apesar de não ser a 100% é muito aceitável.

Por exemplo, inicializar o Timer 1 seria  algo no género:
TIM2->CR1 = (TIM_CounterMode_Up | TIM_CKD_DIV1);
TIM1->ARR = 20;

É compatível com toda a gama da ST, é um acesso directo ao registo e é executado em +-3 ciclos do clock
por linha sem necessidade de passar parâmetros no stack, é simples de entender e de alterar, mas implica
saber o que é o registo ARR e CR1 a as mnemónicas. O equivalente a isto usando a Std Lib da ST seria algo
no género:
TIM_TimeBaseInitTypeDef     TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 0x0008;
TIM_TimeBaseStructure.TIM_Prescaler = 0x0000;;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

E dentro da função "TIM_TimeBaseInit" vamos ter mais uma 20 linhas de código e uns 6 asserts :(

Atenção que não estou a desaconselhar o uso das Libs, somente a partilhar a ideia de que o uso destas pode
ter algumas (por vezes grandes) desvantagens em termos de performance e compactação do código.

Abraços,
PA
Título: Re: Embedded Systems - Shape The World com TIVA TM4C123
Enviado por: StarRider em 28 de Janeiro de 2015, 15:43
Calma eu não vou ao cumulo de escrever algo assim:
(APB2PERIPH_BASE + 0x2400) |= 0xFFEC01AD;
 
Seria mais algo no género: *((uint32_t *) (APB2PERIPH_BASE + 0x2400)) |= 0xFFEC01AD

Abraços,
PA



Precisa de levar um casting antes de ser usado como endereço?

Boas Luís,

Sim, segue este raciocínio::
Código: [Seleccione]
#define APB2PERIPH_BASE    ((uint32_t)0x40010000)
uint32_t addr = (APB2PERIPH_BASE + 0x2400);  //"addr" é um int e contem o valor 0x40012400
uint32_t * pointer = addr;  // "pointer" é um ponteiro para um uint32_t que está no endereco 0x40012400
uint32_t valor = *pointer; // deferenciar o "pointer",  "valor" contem o valor da zona de memoria localizada no
endereço 0x40012400

Abraços,
PA