Mostrar mensagens com a etiqueta chibos. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta chibos. Mostrar todas as mensagens

domingo, 5 de outubro de 2014

MDK uVision 5.12 - ChibiOS - Demo

Configurar ChibiOS + MDK uVison 


Surgi mais um projecto e associado a isso sempre mais dificuldades. Hoje comecei o desenvolvimento de um novo projecto com base na placa Mini STM32 v3 já referida anteriormente.

Foi alterado o ambiente de desenvolvimento de Linux para Windows, neste caso, Windows 8.1.

Todos já devem conhecer o Keil MDK-5 uVision confesso que apesar de já ter ouvido falar foi o meu primeiro contacto, devo dizer que me surpreendeu pela positiva, a curva de aprendizagem é relativamente pequena e tem todas as vantagens de ser um IDE. Em relação a velocidade e tamanho do código gerado pelo compilador também existe pontos a favor versus o GCC.


Antes de mais defini a minha estrutura de pasta, na minha opinião, uma boa estrutura da pasta é fundamental para um desenvolvimento rápido em sistemas embebidos.


Na raiz são adicionadas todas as bibliotecas, dentro da pasta projects as placas de desenvolvimento existentes, e dentro de cada placas as aplicações desenvolvidas. 


Na configuração do uVision foi utilizado como exemplo a placa Mini STM v3, mas é o procedimento é igual para todas a placas, sendo necessário ter em contas as características específicas de cada uma.

Depois de criado o projecto é necessário configurar as Options for Target:

  • Target: Define o hardware de destino, tamanho e endereçamento de de ROM e RAM. É necessário definir o campo IRAM2 no endereço seguinte ao fim da RAM para utilizar com o ChibiOS.


  • C/C++: Configuração referente ao compilador, includes, optimização, defines, etc. Para utilizar com o ChibiOS é necessário includir todos os ficheiros .h utilizados no projecto.
       É necessário incluir os seguintes símbolos e alterar o chconf.h:

                  #define CH_USE_MEMCORE                  FALSE
                  #define CH_USE_HEAP                            FALSE

               define: __heap_base__=Image$$RW_IRAM1$$ZI$$Limit __heap_end__=Image$$RW_IRAM2$$Base



  • ASM: Mais um vez é necessário fazer os includes dos ficheiros utilizados nos ASMs.



  • Debug: Utilizei o programador e debugger ST-Link v2, mas é possível utilizar qualquer um existente na lista.




  •  Utilities: Aqui escolhe-se a placa a destino e o programador para fazer o download do código.





 Após estas configurações, têm a placa configurada, para utilização do ChibiOS, contudo poderá ser necessário adicionar mais include paths. Agora vamos configurar o projecto. O uVision faz a gestão de todos os ficheiros de código adicionados, por isso é necessário adicionar todos os ficheiros de kernel, hal, port e da aplicação para ser possível compilar.

Utilizei o seguinte estilo de grupos:



Por fim temos o nosso resultado :)




Downloads:

Referencias:









quinta-feira, 3 de julho de 2014

Mini STM32 v3.0 - ChibiOS

Placa de desenvolvimento Mini STM32 v3.0 + Display de 2.8" + touchscreen + SD Card breakout.

Mais um update ao desenvolvimento para esta placa, apesar da ST fornecer já um biblioteca com drivers para esta placa é muito mais simpático programar com um RTOS (Real Time Operating System) que basicamente é um sistema operativo destinado a execução de várias tarefas capaz de responder a eventos quer externos quer internos.

Apesar de já ter utilizado outros RTOS, actualmente utilizo o Chibios vister ter boa documentação implementado de uma forma, pode se dizer, bonita, ter HAL integrado, ter outros projectos opensource integrados e fácil desenvolvimento quer de aplicações quer de novas funcionalidades.


O ChibiOS tem a seguinte estrutura:


Não vou entrar em muitos detalhes acerca do conteúdo de cada pasta, mas é pesquisando no site do ChibiOS facilmente encontram boa documentação.

Neste momento utilizo a versão 2.7.0 unstable e para utilizar esta placa tive que criar um nova board nas fontes do ChibiOS. Portei de uma board já existente e adaptei a minha placa tendo em conta o manual e os shcematics da placa.

De seguida criei um demo para esta placa e testei a parte do sistema operativo.


Resultado Final:

*** ChibiOS/RT test suite
***
*** Kernel:       2.7.0unstable
*** Compiled:     Jul  3 2014 - 12:30:48
*** Compiler:     GCC 4.8.2 20130624 (prerelease)
*** Architecture: ARMv7-M
*** Core Variant: Cortex-M3
*** Port Info:    Advanced kernel mode
*** Platform:     STM32F10x Performance Line Medium Density
*** Test Board:   Mini stm32 v3.0

----------------------------------------------------------------------------
--- Test Case 1.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Mutexes, priority inheritance, simple case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Mutexes, priority inheritance, complex case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.5 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.6 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.7 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.8 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Benchmark, messages #1)
--- Score : 129511 msgs/S, 259022 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Benchmark, messages #2)
--- Score : 101477 msgs/S, 202954 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.3 (Benchmark, messages #3)
--- Score : 101477 msgs/S, 202954 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.4 (Benchmark, context switch)
--- Score : 447056 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.5 (Benchmark, threads, full cycle)
--- Score : 73509 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.6 (Benchmark, threads, create only)
--- Score : 113172 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 28169 reschedules/S, 169014 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.8 (Benchmark, round robin context switching)
--- Score : 241560 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.9 (Benchmark, I/O Queues throughput)
--- Score : 410168 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.10 (Benchmark, virtual timers set/reset)
--- Score : 345800 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.11 (Benchmark, semaphores wait/signal)
--- Score : 455580 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.12 (Benchmark, mutexes lock/unlock)
--- Score : 518076 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.13 (Benchmark, RAM footprint)
--- System: 468 bytes
--- Thread: 72 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 16 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------

Final result: SUCCESS



Downloads:


Referências: