Tuesday, February 12, 2013

marcelojo.org - New blog, now wordpress!

  Hello people!

  I'd like to tell you guys that now I'm in wordpress... I'll leave this blog as it is but I'll update only the new one.

  The address is: marcelojo.org

  You can't say that you didn't see it! =D

  See you there!

  Marcelo
Read more ►

Saturday, November 10, 2012

Compile Octave using 16/32 bits colour - Ubuntu


  Hello there,

  This post is a little different of I'm using to write, but yet very useful for us engineers! It's about how to compile octave to be able to load 16 or 32 bits colour images. First of all, what's Octave?
  Octave is a gnu version of Matlab (and it almost compatible with it. Actually most of commands are identical, so migrating for Matlab to Octave should not be very hard. The official site is here!
  Ok, what's the problem? The problem is that Octave uses GraphicsMagick (an image processing program) and by default it comes configured in 8bits in Ubuntu. So, we need to recompile GraphicsMagick to use 16 or 32 bits and then recompile Octave with the new GraphicsMagick. I'm using Ubuntu 12.04, Octave-3.6.3 and GraphicsMagick-1.3.12.
  Here you are the steps:
  1) Download all packages needed.
sudo apt-get install g++ gcc gfortran make libblas-dev liblapack-dev libpcre3-dev libreadline-dev libarpack2-dev libcurl4-gnutls-dev libfftw3-dev libfltk-dev libfontconfig1-dev libfreetype6-dev libglpk-dev libgraphicsmagick++-dev gnuplot libhdf5-serial-dev libgl-dev libqhull-dev libqrupdate-dev libsuitesparse-dev texinfo zlib1g-dev libgraphicsmagick++1-dev libgraphicsmagick++3
  2) Download GraphicsMagick source from Ubuntu repository
wget https://launchpad.net/ubuntu/precise/+source/graphicsmagick/1.3.12-1.1build1/+files/graphicsmagick_1.3.12.orig.tar.gz
  3) Configure and install GraphicsMagick.If you want 16 bits set --with-quantum-depth=16!
tar zxvf graphicsmagick_1.3.12.orig.tar.gz
cd GraphicsMagick-1.3.12
./configure  --with-quantum-depth=32 --enable-shared --disable-static --with-magick-plus-plus=yes
make
sudo make install
  4) Set GraphicsMagick libs path
export PATH=$PATH:/usr/local/lib
  5) Download Octave
wget ftp://ftp.gnu.org/gnu/octave/octave-3.6.3.tar.gz
  6) Configure and install Octave
tar zxvf octave-3.6.3.tar.gz
cd octave-3.6.3
./configure --prefix=/usr/local/octave  --with-blas="-L/usr/lib -lblas" --with-lapack="-L/usr/lib -llapack" --with-fftw3f-libdir=/usr/local/fftw/lib --with-fftw3-includedir=/usr/local/fftw/include --without-curl --enable-shared --disable-static
make
sudo make install
  Here some links that can help you if you have any problems:
GraphicsMagick wiki
Discussed in forum

  Bye
 Marcelo
Read more ►

Saturday, September 8, 2012

STM32F0 discovery + GCC + Eclipse + OpenOCD + Ubuntu - Part II

  Hello!
  As promissed in last post, I'll show you how to setup eclipse to work with the our STM32F0 discovery board + open source toolchain.

1) Open eclipse. First of all we need to install (if not already installed) two new software. So go to menu Help/Install New Software. In work with, type "http://download.eclipse.org/tools/cdt/releases/juno" and in the list below choose CDT Optional Features/ C/C++ GDB Hardware Debugging". Next in http://gnuarmeclipse.sourceforge.net/updates, select "GNU ARM C/C++ Development Support".
  2) Create a new C Project. Go to menu File/New Project and select C/C++ - C Project. Click next.
  3) In next window Choose under ARM Cross Target Application - Empty project. Select your toolchain (Sourcery G++ Lite) or (GNUARM).

  4) Go to menu Project/Properties. In C/C++ Build / Settings select Tool settings. In Target Processor change "Processor" to cortex-m0.


  5) Now in the same Tool Settings tab go to ARM Sourcery Linux GCC C Compiler / Preprocessor and add the following values:
USE_STDPERIPH_DRIVER
USE_STM32F0_DISCOVERY
STM32F0XX


  6) Still in Tool Settings tab go to ARM Sourcery Linux GCC C Linker / General and  uncheck "Do not use standard start file (-nostartfiles) and check "Remove unused sections (-Xlinker --gc-sections). In Script file (-T) set path: /home/stm32/workspace/Template/src/stm32f0.ld



  7) In C/C++ General, select Path and Symbols and add the following paths (in both Assembly and GNU C): 
/Template/Libraries/CMSIS/ST/STM32F0xx/Include
/Template/Libraries/
/Template/src
/Template/Libraries/STM32F0xx_StdPeriph_Driver/inc
/Template/Libraries/CMSIS/Include



  8) Configure GDB by clicking in the small arrow in the right of the bug. Select "Debug Configurations... ". Select "GDB Hardware Debugging" right click and select new. Change name to GDB-OpenOCD and in the bottom of the window click in "Select other..." and select "GDB (DSF) Hardware Debugging Launcher".

 9) Under tab Debugger, uncheck everything and set the path of your gdb from your toolchain:  /home/user/stm32/gcc-arm-none-eabi/bin/arm-none-eabi-gdb

  10) Under tab Start Up, uncheck everything and in "Run commands" add:
target remote localhost:3333
monitor reset init 
monitor stm_flash /home/user/stm32/workspace/Template/Debug/Template.elf 
load /home/user/stm32/workspace/Template/Debug/Template.elf 
symbol-file /home/user/stm32/workspace/Template/Debug/Template.elf 
cont

  11) Now configure OpenOCD by clicking in the small arrow in the right of the play with toolbox (external tools). Select "External Tool Configurations... ". Select "Program" right click and select new. Change name to OpenOCD. Set openocd path: /usr/bin/openocd and working directory: /home/user/stm32/openocd-0.6.0-rc1/tcl
  In "Arguments" write: -f /home/user/stm32/workspace/Template/extra/stm32f0discovery.cfg -f /home/user/stm32/workspace/Template/extra/stm32f0-openocd.cfg

  If everything is OK, compile your hello world program. Go to "External Tools" and select "OpenOCD". It should show de following message in Console:

Open On-Chip Debugger 0.6.0-rc1 (2012-09-03-20:37)
Licensed under GNU GPL v2
[...]


  Now, the great moment, put a breakpoint in your main and select the bug icon "GDB - OpenOCD". It should stop your code like this:



  That's all for today!

  Marcelo

Read more ►

Wednesday, August 22, 2012

Digikey - 180 days of education

  Hello there!

  This post I'd like to comment a little bit about the digikey continuing education program. It's 180 days of education in electronics, firmware, concepts, good practices in R&D, tests, etc. For those who missed the others class, we can listen to all archived classes. There plenty of differents topics like

  • Introduction to electronics
  • Linux kernel debugging
  • Basics of software-based test systems
  • Testing wireless devices & systems
  For archived classes click here!
  In these days they are discussing about ARM Cortex-M0 and in the next few days it will be about Embedded Computer Vision. 


  Everything is free!

  Bye

  Marcelo
Read more ►

Saturday, August 18, 2012

STM32F0 discovery + GCC + Eclipse + OpenOCD + Ubuntu - Part I

Hello there!

In this post I'll show how to set up your IDE to debug the STM32F0 discovery board using open source tools.
The STM32F0 is a kit (very cheap) from ST micro to introduces the ARM Cortex - M0. This little boards has integrated a STM32F051R8T6 microcontroller with a button, leds and I/Os and also a st-linkV2 which is used to program and debug. That's why this little board is so amazing! We can use the st-linkV2 embedded to program and debug others microcontrollers, you need only to change two jumpers and we're ready!

I must say that everything I did here was based in what Mike Szczys did here. So THANK YOU Mike!!!
Ok, let's start! First of all, create a folder stm32 in your home. We'll use this folder to save all files.

mkdir /home/stm32

1) Installing basic tools
sudo apt-get install build-essential
sudo apt-get install git
sudo apt-get install libtool
sudo apt-get install libftdi1
sudo apt-get install texinfo

2) Installing toolchain
a) You can download toolchain from code sourcery (or if you prefer, you can use crosstool-ng and generate your own toolchain)
https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite

b) Install toolchain
sh ./arm-2012.03-56-arm-none-eabi.bin

if you have the error "ERROR: DASH shell not supported as system shell", type
sudo dpkg-reconfigure -plow dash

c) Chose: Minimal installation, default folder, check "Modify path for user", check "Don't create links"

3) Installing OpenOCD
Get here the latest version of OpenOCD (I got openocd-0.6.0-rc1) and save

tar jxvf openocd-0.6.0-rc1.tar.bz2
cd openocd-0.6.0-rc1
./configure --prefix=/usr --enable-maintainer-mode --enable-stlink
make
sudo make install

4) Install udev rules
git clone git://github.com/texane/stlink.git
cd /home/stm32/stlink
sudo install -m 644 49-stlinkv2.rules /etc/udev/rules.d/49-stlinkv2.rules
sudo udevadm control --reload-rules

5) Install Eclipse
a)Get the latest version Eclipse C/C++ here. My version is Indigo.
b) Install plugins. Go to Help/Install New Software...
c) Work with: http://gnuarmeclipse.sourceforge.net/updates and chose GNU ARM C/C++ Developement Support. Install it.
d) Work with: http://download.eclipse.org/tools/cdt/releases/indigo and chose GDB hardware debugging. Install it.

6) Get templates and setting up file directory
a) Create a workspace, a Template and a src folder inside at /home/stm32 (or somewhere)
mkdir /home/stm32/workspace
mkdir /home/stm32/workspace/Template
mkdir /home/stm32/workspace/Template/src

b) Download the following templates:
STM32F0discovery_fw.zip
git clone https://github.com/szczys/stm32f0-discovery-basic-template.git

b) Unzip STM32F0discovery_fw.zip and copy the Libraries folder into /home/stm32/workspace/Template
c) Copy STM32F0-Discovery_FW_V1.0.0/Project/Demonstration/stm32f0xx_conf.h into src folder.
d) Copy and paste the files in stm32f0-discovery-basic-template/Device/ldscripts/ into src folder.
e) Edit stm32f0.ld in src folder. Change paths in both include:
INCLUDE "/home/stm32/workspace/Template/src/stm32f0discovery_def.ld"INCLUDE "/home/stm32/workspace/Template/src/sections_flash.ld"f) Copy stm32f0-discovery-basic-template/Device/startup_stm32f0xx.s into src folder. RENAME IT TO .S. It's an eclipse issue.
g) Copy folder stm32f0-discovery-basic-template/Extra to /home/stm32/workspace/Template/


This post is already too long. In next post I'll show how to start a new project and set up debugger and OpenOCD in Eclipse. I promise that it will be soon!

Bye

Marcelo
Read more ►

Saturday, July 21, 2012

Philip Koopman - Better Embedded System Software Review

  Hello there!
  This post is a review of Philip's book - Better Embedded System Software. I was looking for a book where I could learn a little more about the processes of making an embedded system project or how improve my designs, improve the management of my projects, etc. I wasn't looking for something big or "complicated" as PMBOK, so I found this wonderful book.
  Although the word Software in its title, you can use most of all suggestions to your hardware design too.




 
The book covers the following topics: system development plan,  requirements,  architecture,  design,  implementation and test plans. For every topic the author give us the bad symptoms if we are not doing a good job or doing in an incorrectly manner, the risks if we continue doing in that way, how to improve or correct our management and the pitfalls to follow his suggestions. Everything with lots of good practices and good ideas.
  I think that this book is intend for people who has already a good background in development and want to improve a little more in project management. Once I mainly worked in small and medium companies, I always notice that in those companies we weren't very organized or they didn't have a methodical approach to design and that was the cause of many problems and bugs that could be solved before they happened.
  At the beginning I though that this book was a little expensive but after reading it I realized that it worth every penny payed.


  Marcelo
Read more ►

Tuesday, June 5, 2012

Michael Barr - Embedded C Coding Standard - Review

  Hello there!
  This post is a review of Michael Barr's Embedded C Coding Standard book.
  First of all, why a c coding standard? I have been working in my life in small and medium companies and in most of them, we always had the same problem. No c coding standard. Everyone had their own standard and very often, those standard are not standard, because it used to change every project. Every time some one quit the company, it's always the same problem: code badly written, no comments, hard to read, hard to understand and overall hard to maintain.
  So this book is a very good start point for those who works in a company which doesn't have a standard and want to deploy one.
  First Michael Barr make clear that the code written is a property of the company and not of the programmer. A standard code eliminates conflict over items that are sometimes viewed as personal stylistic preferences.
  Yet, a standard can prevent some bugs because it forces a programmer to follow some good practices that people normally doesn't do, like always open and close braces, even in a if with only one statement.
  Indeed, this book shows some goods practices like:

  1. Never leave a code with comments. We should comment code with #if 0
  2. Use inline functions instead of macros
  3. Always use parentheses and don't rely in C's operator precedence
  4. Use of doxygen to document code
  5. Create the comments before begins to code once we have to know what the functions must do before start coding.
  Of course there are some suggestions that I'm not agree like:
  • Use only 80 columns for code
  I think that nowadays we have big screens and the IDE is much better than before, so I don't see any problem in use more than 80 columns.
  • Use goto, continue or break.
I understand that the use of this keywords can lead to "spaguetti" code, but if you really  know what are you doing, I don't think that you'll have problems.
  We can always adapt this standard. The most important thing is to have one and follow it. For sure it will save you several hours of debugging and it will improve your code quality.

  Marcelo
Read more ►