<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6820831003345794702</atom:id><lastBuildDate>Mon, 07 Oct 2024 05:19:22 +0000</lastBuildDate><category>Embedded Linux</category><category>FPGA</category><category>tools</category><category>toolchain</category><category>Cortex M0</category><category>LPC2468</category><category>C Programming</category><category>STM32F0</category><category>VHDL</category><category>computer vision</category><title>Marcelo Jo&#39;s blog</title><description></description><link>http://marcelojoeng.blogspot.com/</link><managingEditor>noreply@blogger.com (Marcelo Jo)</managingEditor><generator>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-6642447470156393330</guid><pubDate>Tue, 12 Feb 2013 17:20:00 +0000</pubDate><atom:updated>2013-02-12T09:23:29.889-08:00</atom:updated><title>marcelojo.org - New blog, now wordpress!</title><description>&amp;nbsp; Hello people!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; I&#39;d like to tell you guys that now I&#39;m in wordpress... I&#39;ll leave this blog as it is but I&#39;ll update only the new one.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; The address is: &lt;a href=&quot;http://marcelojo.org/&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;marcelojo.org&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; You can&#39;t say that you didn&#39;t see it! =D&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; See you there!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo</description><link>http://marcelojoeng.blogspot.com/2013/02/new-blog.html</link><author>noreply@blogger.com (Marcelo Jo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-1409783981901278053</guid><pubDate>Sat, 10 Nov 2012 16:02:00 +0000</pubDate><atom:updated>2012-11-10T08:06:10.697-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">computer vision</category><category domain="http://www.blogger.com/atom/ns#">tools</category><title>Compile Octave using 16/32 bits colour - Ubuntu</title><description>&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyYfAU9ODQhEfb1eTDqrT1tCpKye4FSP884dk8-rFkTOZBlXUVS2wBAl-_Q9Rn4IamV55ciPKk74OkXzEAfXQN1VtXDXZ5x6xyH80HvL5L587FFjJH6_vVG2KRCywBLaUQetUj5H7NvA3_/s1600/octave.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyYfAU9ODQhEfb1eTDqrT1tCpKye4FSP884dk8-rFkTOZBlXUVS2wBAl-_Q9Rn4IamV55ciPKk74OkXzEAfXQN1VtXDXZ5x6xyH80HvL5L587FFjJH6_vVG2KRCywBLaUQetUj5H7NvA3_/s1600/octave.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; Hello there,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; This post is a little different of I&#39;m using to write, but yet very&amp;nbsp;useful&amp;nbsp;for us engineers! It&#39;s about how to compile octave to be able to load 16 or 32 bits&amp;nbsp;colour&amp;nbsp;images. First of all, what&#39;s Octave?&lt;br /&gt;
&amp;nbsp; 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&amp;nbsp;&lt;a href=&quot;http://www.gnu.org/software/octave/&quot;&gt;here&lt;/a&gt;!&lt;br /&gt;
&amp;nbsp; Ok, what&#39;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&#39;m using Ubuntu 12.04, Octave-3.6.3 and GraphicsMagick-1.3.12.&lt;br /&gt;
&amp;nbsp; Here you are the steps:&lt;br /&gt;
&amp;nbsp; 1) Download all packages needed.

&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;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
&lt;/pre&gt;
&amp;nbsp; 2) Download&lt;a href=&quot;https://launchpad.net/ubuntu/precise/+source/graphicsmagick/1.3.12-1.1build1&quot; target=&quot;_blank&quot;&gt; GraphicsMagick source&lt;/a&gt; from Ubuntu repository

&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;wget https://launchpad.net/ubuntu/precise/+source/graphicsmagick/1.3.12-1.1build1/+files/graphicsmagick_1.3.12.orig.tar.gz
&lt;/pre&gt;
&amp;nbsp; 3) Configure and install GraphicsMagick.If you want 16 bits set --with-quantum-depth=16!&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;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
&lt;/pre&gt;
&amp;nbsp; 4) Set GraphicsMagick libs path

&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;export PATH=$PATH:/usr/local/lib
&lt;/pre&gt;
&amp;nbsp; 5) Download &lt;a href=&quot;http://www.gnu.org/software/octave/download.html&quot; target=&quot;_blank&quot;&gt;Octave&lt;/a&gt;

&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;wget&amp;nbsp;ftp://ftp.gnu.org/gnu/octave/octave-3.6.3.tar.gz
&lt;/pre&gt;
&amp;nbsp; 6) Configure and install Octave

&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;tar zxvf octave-3.6.3.tar.gz
cd octave-3.6.3
./configure --prefix=/usr/local/octave  --with-blas=&quot;-L/usr/lib -lblas&quot; --with-lapack=&quot;-L/usr/lib -llapack&quot; --with-fftw3f-libdir=/usr/local/fftw/lib --with-fftw3-includedir=/usr/local/fftw/include --without-curl --enable-shared --disable-static
make
sudo make install
&lt;/pre&gt;
&amp;nbsp; Here some links that can help you if you have any problems:&lt;br /&gt;
&lt;a href=&quot;http://wiki.octave.org/GraphicsMagick&quot; target=&quot;_blank&quot;&gt;GraphicsMagick wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sourceforge.net/mailarchive/forum.php?thread_name=CAPOrs_0SFFaohLBhNtMxNmipCfPSRAtjs7p0-BX-kth2L195Rg%40mail.gmail.com&amp;amp;forum_name=graphicsmagick-help&quot; target=&quot;_blank&quot;&gt;Discussed in forum&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Bye&lt;br /&gt;
&amp;nbsp;Marcelo</description><link>http://marcelojoeng.blogspot.com/2012/11/compile-octave-using-1632-bits-colour.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyYfAU9ODQhEfb1eTDqrT1tCpKye4FSP884dk8-rFkTOZBlXUVS2wBAl-_Q9Rn4IamV55ciPKk74OkXzEAfXQN1VtXDXZ5x6xyH80HvL5L587FFjJH6_vVG2KRCywBLaUQetUj5H7NvA3_/s72-c/octave.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-8678218008643308434</guid><pubDate>Sun, 09 Sep 2012 06:19:00 +0000</pubDate><atom:updated>2012-09-09T14:37:45.896-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cortex M0</category><category domain="http://www.blogger.com/atom/ns#">STM32F0</category><category domain="http://www.blogger.com/atom/ns#">toolchain</category><category domain="http://www.blogger.com/atom/ns#">tools</category><title>STM32F0 discovery + GCC + Eclipse + OpenOCD + Ubuntu - Part II</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjETh1d4Sgg4dTCmeM7BQdyjGwgGiFUNO9iL2B9S2WHXQRr6Szhf2lrL4YCM7-2u4QqzdRPMqLGgzGS7DvZE_7Q6qF7avxH6_594n4J65FLEOgtPZI_wggOob4ZDyvPa5ynjI4PpjdKgTYz/s1600/eclipse.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjETh1d4Sgg4dTCmeM7BQdyjGwgGiFUNO9iL2B9S2WHXQRr6Szhf2lrL4YCM7-2u4QqzdRPMqLGgzGS7DvZE_7Q6qF7avxH6_594n4J65FLEOgtPZI_wggOob4ZDyvPa5ynjI4PpjdKgTYz/s200/eclipse.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Hello!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; As promissed in last post, I&#39;ll show you how to setup eclipse to work with the our STM32F0 discovery board + open source toolchain.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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 &quot;http://download.eclipse.org/tools/cdt/releases/juno&quot; and in the list below choose CDT Optional Features/ C/C++ GDB Hardware Debugging&quot;. Next in&amp;nbsp;&lt;span style=&quot;text-indent: -0.5cm;&quot;&gt;http://gnuarmeclipse.sourceforge.net/updates, select &quot;GNU ARM C/C++ Development Support&quot;.&lt;/span&gt;&lt;br /&gt;

 
 
 


&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 2) Create a new C Project. Go to menu File/New Project and select C/C++ - C Project. Click next.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 3) In next window Choose under ARM Cross Target Application - Empty project. Select your toolchain (Sourcery G++ Lite) or (GNUARM).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 4) Go to menu Project/Properties. In C/C++ Build / Settings select Tool settings. In Target Processor change &quot;Processor&quot; to cortex-m0.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYLwav9dkOfwEPQxRxyMwKJ04jgEXfOi_ut7zF8fyxMukDFfDYQu4TOVXL0RCm1lSKnWVwUDC8xjgzPjgECVZeXmvew00RkxmquFiXy3kW5EYQLJh75-6SqKSjmvMXoXcSPNQUJ1m4X8DU/s1600/eclipse1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYLwav9dkOfwEPQxRxyMwKJ04jgEXfOi_ut7zF8fyxMukDFfDYQu4TOVXL0RCm1lSKnWVwUDC8xjgzPjgECVZeXmvew00RkxmquFiXy3kW5EYQLJh75-6SqKSjmvMXoXcSPNQUJ1m4X8DU/s400/eclipse1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 5) Now in the same Tool Settings tab go to ARM Sourcery Linux GCC C Compiler / Preprocessor and add the following values:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;USE_STDPERIPH_DRIVER&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;USE_STM32F0_DISCOVERY&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;STM32F0XX&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKr_TRXWViieROMPBgXf1RYrvq0-pLdq1l8p7ok2O7Y4Wf2DkDtjNH_N64nQN-58DKmpXnRCt2Y8c0eciYZvC5aUe3kWtjDCtpnoug-nhMIUdRWvftnoPavkzr-TIwXJz4hAVkU2ahCwjt/s1600/eclipse2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKr_TRXWViieROMPBgXf1RYrvq0-pLdq1l8p7ok2O7Y4Wf2DkDtjNH_N64nQN-58DKmpXnRCt2Y8c0eciYZvC5aUe3kWtjDCtpnoug-nhMIUdRWvftnoPavkzr-TIwXJz4hAVkU2ahCwjt/s400/eclipse2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; 6) Still in Tool Settings tab go to&amp;nbsp;ARM Sourcery Linux GCC C Linker / General and &amp;nbsp;&lt;b&gt;uncheck &lt;/b&gt;&quot;Do not use standard start file (-nostartfiles) and &lt;b&gt;check&lt;/b&gt;&amp;nbsp;&quot;Remove unused sections (-Xlinker --gc-sections). In Script file (-T) set path: /home/stm32/workspace/Template/src/stm32f0.ld&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0R0F7NzSs6MmB98RE6VOEGL-1x4BKlexx8lrXMXha-pmpr3Cj5yjYr12fIGASLuwEhkwV_KeVLkRBDf2uysqYIMamp5bTjJML7b_d3QrT4tgciR0i5UG1NH6zNonKfKmiUpdcP6qrXwvz/s1600/eclipse5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;227&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0R0F7NzSs6MmB98RE6VOEGL-1x4BKlexx8lrXMXha-pmpr3Cj5yjYr12fIGASLuwEhkwV_KeVLkRBDf2uysqYIMamp5bTjJML7b_d3QrT4tgciR0i5UG1NH6zNonKfKmiUpdcP6qrXwvz/s400/eclipse5.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; 7) In C/C++ General, select Path and Symbols and add the following paths (in both Assembly and GNU C):&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
/Template/Libraries/CMSIS/ST/STM32F0xx/Include&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
/Template/Libraries/&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
/Template/src&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
/Template/Libraries/STM32F0xx_StdPeriph_Driver/inc&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
/Template/Libraries/CMSIS/Include&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi17q4xh1ROx-o6wvlseBG1WymxVk8-TzJ5IDLGPkcvpewiGiAq6_1tfwlnZgW7v8ICGH_Gf8IQG9p8INk5n3UiLLYEsaL7XDILvsyh1ShbhsRHk9wfP-SPh_vFf4MdBdHY9De-SzehJsVa/s1600/eclipse3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;130&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi17q4xh1ROx-o6wvlseBG1WymxVk8-TzJ5IDLGPkcvpewiGiAq6_1tfwlnZgW7v8ICGH_Gf8IQG9p8INk5n3UiLLYEsaL7XDILvsyh1ShbhsRHk9wfP-SPh_vFf4MdBdHY9De-SzehJsVa/s400/eclipse3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; 8) Configure GDB by clicking in the small arrow in the right of the bug. Select &quot;Debug Configurations... &quot;. Select &quot;GDB Hardware Debugging&quot; right click and select new. Change name to GDB-OpenOCD and in the bottom of the window click in &quot;Select other...&quot; and select &quot;GDB (DSF) Hardware Debugging Launcher&quot;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp;9) Under tab Debugger, uncheck everything and set the path of your gdb from your toolchain: &amp;nbsp;/home/user/stm32/gcc-arm-none-eabi/bin/arm-none-eabi-gdb&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; 10) Under tab Start Up, uncheck everything and in &quot;Run commands&quot; add:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
target remote localhost:3333&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
monitor reset init&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
monitor stm_flash /home/user/stm32/workspace/Template/Debug/Template.elf&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
load /home/user/stm32/workspace/Template/Debug/Template.elf&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
symbol-file /home/user/stm32/workspace/Template/Debug/Template.elf&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
cont&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; 11) Now configure OpenOCD by clicking in the small arrow in the right of the play with toolbox (external tools). Select &quot;External Tool Configurations... &quot;. Select &quot;Program&quot; right click and select new. Change name to OpenOCD. Set openocd path: /usr/bin/openocd and working directory:&amp;nbsp;/home/user/stm32/openocd-0.6.0-rc1/tcl&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; In &quot;Arguments&quot; write:&amp;nbsp;-f /home/user/stm32/workspace/Template/extra/stm32f0discovery.cfg&amp;nbsp;-f /home/user/stm32/workspace/Template/extra/stm32f0-openocd.cfg&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; If everything is OK, compile your hello world program. Go to &quot;External Tools&quot; and select &quot;OpenOCD&quot;. It should show de following message in Console:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;span style=&quot;color: red;&quot;&gt;Open On-Chip Debugger 0.6.0-rc1 (2012-09-03-20:37)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;span style=&quot;color: red;&quot;&gt;Licensed under GNU GPL v2&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;span style=&quot;color: red;&quot;&gt;[...]&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; Now, the great moment, put a breakpoint in your main and select the bug icon &quot;GDB - OpenOCD&quot;. It should stop your code like this:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitO8tSh5Htr-i6Lk9cSkWqCG5ik9aeEG7Cpm3owPUyb7SlbGCr3ZpValIMp8RXe_TZGqeSA_8l80FMTCfF3Wc4vjHpn4kgVXV8GMPg9SUmgYhvsB_MQFaYMO_uzu3HR9igLDAxeXJ_VtrL/s1600/eclipse6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitO8tSh5Htr-i6Lk9cSkWqCG5ik9aeEG7Cpm3owPUyb7SlbGCr3ZpValIMp8RXe_TZGqeSA_8l80FMTCfF3Wc4vjHpn4kgVXV8GMPg9SUmgYhvsB_MQFaYMO_uzu3HR9igLDAxeXJ_VtrL/s640/eclipse6.png&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; That&#39;s all for today!&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://marcelojoeng.blogspot.com/2012/09/stm32f0-discovery-gcc-eclipse-openocd.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjETh1d4Sgg4dTCmeM7BQdyjGwgGiFUNO9iL2B9S2WHXQRr6Szhf2lrL4YCM7-2u4QqzdRPMqLGgzGS7DvZE_7Q6qF7avxH6_594n4J65FLEOgtPZI_wggOob4ZDyvPa5ynjI4PpjdKgTYz/s72-c/eclipse.png" height="72" width="72"/><thr:total>11</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-9145891638953839972</guid><pubDate>Wed, 22 Aug 2012 18:56:00 +0000</pubDate><atom:updated>2012-08-22T11:56:45.567-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cortex M0</category><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><title>Digikey - 180 days of education</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8Yg9Z7CpHR1QMXrCuByYIlumuHSpDcI09vPjPCPYERtqtWKBsapTyHUn4Eu4zael0FJ1_rt0ANw4VGl7sFhc1YKJX5XQhWHCC_gFMoZ7yBZhk5VN_cdWvGkBTyA96kAm0dZo7lO6UQWp/s1600/Sans+titre.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8Yg9Z7CpHR1QMXrCuByYIlumuHSpDcI09vPjPCPYERtqtWKBsapTyHUn4Eu4zael0FJ1_rt0ANw4VGl7sFhc1YKJX5XQhWHCC_gFMoZ7yBZhk5VN_cdWvGkBTyA96kAm0dZo7lO6UQWp/s1600/Sans+titre.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; Hello there!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; This post I&#39;d like to comment a little bit about the digikey continuing education program. It&#39;s 180 days of education in electronics, firmware, concepts, good practices in R&amp;amp;D, tests, etc. For those who missed the others class, we can listen to all archived classes. There plenty of differents topics like&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Introduction to electronics&lt;/li&gt;
&lt;li&gt;Linux kernel debugging&lt;/li&gt;
&lt;li&gt;Basics of software-based test systems&lt;/li&gt;
&lt;li&gt;Testing wireless devices &amp;amp; systems&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp; For archived classes click&amp;nbsp;&lt;a href=&quot;http://www.designnews.com/archives.asp?section_id=1636&quot;&gt;here&lt;/a&gt;!&lt;br /&gt;&lt;div&gt;
&amp;nbsp; In these days they are discussing about ARM Cortex-M0 and in the next few days it will be about Embedded Computer Vision.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Everything is free!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Bye&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo</description><link>http://marcelojoeng.blogspot.com/2012/08/digikey-180-days-of-education.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ8Yg9Z7CpHR1QMXrCuByYIlumuHSpDcI09vPjPCPYERtqtWKBsapTyHUn4Eu4zael0FJ1_rt0ANw4VGl7sFhc1YKJX5XQhWHCC_gFMoZ7yBZhk5VN_cdWvGkBTyA96kAm0dZo7lO6UQWp/s72-c/Sans+titre.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-5622660973536923780</guid><pubDate>Sat, 18 Aug 2012 07:37:00 +0000</pubDate><atom:updated>2012-08-18T14:13:43.155-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cortex M0</category><category domain="http://www.blogger.com/atom/ns#">STM32F0</category><category domain="http://www.blogger.com/atom/ns#">toolchain</category><category domain="http://www.blogger.com/atom/ns#">tools</category><title>STM32F0 discovery + GCC + Eclipse + OpenOCD + Ubuntu - Part I</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAgAOtpcMP4LZCKE9XOlG2lBKETk6gpH2frdFnltP7AKM4Cuoxu62uppsO1vbavEyFA6SjcLe9uM1ymIC8VSl2MJTt8ViY3og6s9-vCFEu5z5udNREgLIPRRKvG_i8br_SdsZ5q0K5rOK5/s1600/stm32f0discovery.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAgAOtpcMP4LZCKE9XOlG2lBKETk6gpH2frdFnltP7AKM4Cuoxu62uppsO1vbavEyFA6SjcLe9uM1ymIC8VSl2MJTt8ViY3og6s9-vCFEu5z5udNREgLIPRRKvG_i8br_SdsZ5q0K5rOK5/s200/stm32f0discovery.jpg&quot; width=&quot;120&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Hello there!&lt;br /&gt;
&lt;br /&gt;
In this post I&#39;ll show how to set up your IDE to debug the STM32F0 discovery board using open source tools.&lt;br /&gt;
The STM32F0 is a kit (very cheap) from ST micro to introduces the ARM Cortex - M0. This little boards has integrated a &lt;a href=&quot;http://www.st.com/internet/mcu/product/251901.jsp&quot;&gt;STM32F051R8T6&lt;/a&gt; microcontroller with a button, leds and I/Os and also a &lt;a href=&quot;http://www.st.com/internet/evalboard/product/251168.jsp&quot;&gt;st-linkV2&lt;/a&gt;&amp;nbsp;which is used to program and debug. That&#39;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&#39;re ready!&lt;br /&gt;
&lt;br /&gt;
I must say that everything I did here was based in what Mike Szczys did &lt;a href=&quot;https://github.com/szczys/stm32f0-discovery-basic-template&quot;&gt;here&lt;/a&gt;. &lt;b&gt;So THANK YOU Mike!!!&lt;/b&gt;&lt;br /&gt;
Ok, let&#39;s start! First of all, create a folder stm32 in your home. We&#39;ll use this folder to save all files.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;mkdir /home/stm32
&lt;/pre&gt;
&lt;br /&gt;
1) Installing basic tools&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;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
&lt;/pre&gt;
&lt;br /&gt;
2) Installing toolchain&lt;br /&gt;
a) You can download toolchain from code sourcery (or if you prefer, you can use &lt;a href=&quot;http://crosstool-ng.org/&quot;&gt;crosstool-ng&lt;/a&gt;&amp;nbsp;and generate your own toolchain)&lt;br /&gt;
&lt;u style=&quot;color: navy;&quot;&gt;&lt;a href=&quot;https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite&quot;&gt;https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite&lt;/a&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
b) Install toolchain&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;sh ./arm-2012.03-56-arm-none-eabi.bin
&lt;/pre&gt;
&lt;br /&gt;
if you have the error &quot;ERROR: DASH shell not supported as system shell&quot;, type&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;sudo dpkg-reconfigure -plow dash
&lt;/pre&gt;
&lt;br /&gt;
c) Chose: Minimal installation, default folder, check &quot;Modify path for user&quot;, check &quot;Don&#39;t create links&quot;&lt;br /&gt;
&lt;br /&gt;
3) Installing OpenOCD&lt;br /&gt;
Get &lt;a href=&quot;http://sourceforge.net/projects/openocd/files/openocd/&quot;&gt;here&lt;/a&gt; the latest version of OpenOCD (I got openocd-0.6.0-rc1) and save&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;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
&lt;/pre&gt;
&lt;br /&gt;
4) Install udev rules&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;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
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;5) Install Eclipse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;a)Get the latest version Eclipse C/C++&amp;nbsp;&lt;a href=&quot;http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/junor&quot;&gt;here&lt;/a&gt;. My version is Indigo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
b) Install plugins. Go to Help/Install New Software...&lt;br /&gt;
c) Work with:&amp;nbsp;&lt;span style=&quot;text-indent: -0.5cm;&quot;&gt;http://gnuarmeclipse.sourceforge.net/updates and chose &lt;b&gt;GNU ARM C/C++ Developement Support&lt;/b&gt;. Install it.&lt;/span&gt;&lt;br /&gt;
d) Work with:&amp;nbsp;http://download.eclipse.org/tools/cdt/releases/indigo and chose&amp;nbsp;&lt;b&gt;GDB hardware debugging&lt;/b&gt;. Install it.&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;6) Get templates and setting up file directory&lt;/span&gt;&lt;br /&gt;
a) Create a workspace, a Template and a src folder inside at /home/stm32 (or somewhere)&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; false=&quot;false&quot; toolbar:=&quot;toolbar:&quot;&gt;mkdir /home/stm32/workspace
mkdir /home/stm32/workspace/Template
mkdir /home/stm32/workspace/Template/src
&lt;/pre&gt;
&lt;br /&gt;
b) Download the following templates:&lt;br /&gt;
&lt;a href=&quot;http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f0discovery_fw.zip&quot;&gt;STM32F0discovery_fw.zip&lt;/a&gt;&lt;br /&gt;
git clone https://github.com/szczys/stm32f0-discovery-basic-template.git&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;b) Unzip STM32F0discovery_fw.zip and copy the Libraries folder into /home/stm32/workspace/Template&lt;br /&gt;c) Copy&amp;nbsp;STM32F0-Discovery_FW_V1.0.0/Project/Demonstration/stm32f0xx_conf.h into src folder.&lt;br /&gt;d) Copy and paste the files in&amp;nbsp;stm32f0-discovery-basic-template/Device/ldscripts/ into src folder.&lt;br /&gt;e) Edit stm32f0.ld in src folder. Change paths in both include:&lt;br /&gt;&lt;b&gt;INCLUDE &quot;/home/stm32/workspace/Template/src/stm32f0discovery_def.ld&quot;&lt;/b&gt;&lt;b&gt;INCLUDE &quot;/home/stm32/workspace/Template/src/sections_flash.ld&quot;&lt;/b&gt;f) Copy&amp;nbsp;stm32f0-discovery-basic-template/Device/startup_stm32f0xx.s into src folder. &lt;b&gt;RENAME IT TO .S&lt;/b&gt;. It&#39;s an eclipse issue.&lt;br /&gt;g) Copy folder&amp;nbsp;stm32f0-discovery-basic-template/Extra to /home/stm32/workspace/Template/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;This post is already too long. In next post I&#39;ll show how to start a new project and set up debugger and OpenOCD in Eclipse. I promise that it will be soon!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Bye&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;Marcelo&lt;/span&gt;&lt;/span&gt;</description><link>http://marcelojoeng.blogspot.com/2012/08/stm32f0-discovery-gcc-eclipse-openocd.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAgAOtpcMP4LZCKE9XOlG2lBKETk6gpH2frdFnltP7AKM4Cuoxu62uppsO1vbavEyFA6SjcLe9uM1ymIC8VSl2MJTt8ViY3og6s9-vCFEu5z5udNREgLIPRRKvG_i8br_SdsZ5q0K5rOK5/s72-c/stm32f0discovery.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-6504124904106964246</guid><pubDate>Sat, 21 Jul 2012 16:51:00 +0000</pubDate><atom:updated>2012-07-21T09:57:38.716-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C Programming</category><title>Philip Koopman - Better Embedded System Software Review</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibE4VXaKwDp7-28VYqo7-kcw1QcSu7-TVqsZTtb8r8tNMo_bKoNDrpUDKCp3g8DJsLHOj_EMgGIuATVep4RFaZ1pyorHM6lzqvUnfsnZAQb8Fa28QlyMFe2ZgrIt6ntKZQEt_dg8RmS4a-/s1600/bess_cover.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibE4VXaKwDp7-28VYqo7-kcw1QcSu7-TVqsZTtb8r8tNMo_bKoNDrpUDKCp3g8DJsLHOj_EMgGIuATVep4RFaZ1pyorHM6lzqvUnfsnZAQb8Fa28QlyMFe2ZgrIt6ntKZQEt_dg8RmS4a-/s200/bess_cover.gif&quot; width=&quot;131&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;Hello there!&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; This post is a review of Philip&#39;s book - Better Embedded System Software. I was looking for a book where I could learn a little more about the&amp;nbsp;processes&amp;nbsp;of making an embedded system project or how improve my designs, improve the management of my projects, etc. I wasn&#39;t looking for something big or &quot;complicated&quot; as PMBOK, so I found this wonderful book.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; Although the word Software in its title, you can use most of all suggestions to your hardware design too.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi77_1bYVv3zRLjbLCyTMrngbBDWUUBf6us9Gmo_fEPqUJeiGgXP08xwDcdRNC0D_tujZSgNrSIovP09Zi8alldOOOzdQTOAEIH2yAdA14y6xDp9eHWEXwondcZp1EMJhN7-NFGxjrknjPR/s1600/bess_back.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;span color: black;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi77_1bYVv3zRLjbLCyTMrngbBDWUUBf6us9Gmo_fEPqUJeiGgXP08xwDcdRNC0D_tujZSgNrSIovP09Zi8alldOOOzdQTOAEIH2yAdA14y6xDp9eHWEXwondcZp1EMJhN7-NFGxjrknjPR/s200/bess_back.gif&quot; width=&quot;125&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span&gt;The book covers the following topics: system development plan, &amp;nbsp;requirements, &amp;nbsp;architecture, &amp;nbsp;design, &amp;nbsp;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&amp;nbsp;incorrectly&amp;nbsp;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.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; 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&#39;t very organized or they didn&#39;t have a methodical approach to design and that was the cause of many problems and bugs that could be solved before they happened.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; At the beginning I though that this book was a little expensive but after reading it I realized that it&amp;nbsp;worth&amp;nbsp;every penny payed.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; Marcelo&lt;/span&gt;</description><link>http://marcelojoeng.blogspot.com/2012/07/philip-koopman-better-embedded-system.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibE4VXaKwDp7-28VYqo7-kcw1QcSu7-TVqsZTtb8r8tNMo_bKoNDrpUDKCp3g8DJsLHOj_EMgGIuATVep4RFaZ1pyorHM6lzqvUnfsnZAQb8Fa28QlyMFe2ZgrIt6ntKZQEt_dg8RmS4a-/s72-c/bess_cover.gif" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-3550481129133769609</guid><pubDate>Wed, 06 Jun 2012 02:32:00 +0000</pubDate><atom:updated>2012-06-05T20:16:54.892-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C Programming</category><title>Michael Barr - Embedded C Coding Standard - Review</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKHt4G5nRTu3ZVVEROhH14ovxWjGOF7MUBurTJ5y5BbCjr4ImBogUVWR53O-cgJqeyOvHw037mnGL5oqxByNkxY8pLSrsdjsPy7J-LXCCG3VzddLH5CmuScWOjBp6rmjmiovrF8fSWVg62/s1600/images.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKHt4G5nRTu3ZVVEROhH14ovxWjGOF7MUBurTJ5y5BbCjr4ImBogUVWR53O-cgJqeyOvHw037mnGL5oqxByNkxY8pLSrsdjsPy7J-LXCCG3VzddLH5CmuScWOjBp6rmjmiovrF8fSWVg62/s1600/images.jpg&quot; /&gt;&lt;/a&gt;&amp;nbsp; Hello there!&lt;br /&gt;
&amp;nbsp; This post is a review of Michael Barr&#39;s Embedded C Coding Standard book.&lt;br /&gt;
&amp;nbsp; First of all, why a c coding standard?&amp;nbsp;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&#39;s always the same problem: code badly written, no comments, hard to read, hard to understand and overall hard to maintain.&lt;br /&gt;
&amp;nbsp; So this book is a very good start point for those who works in a company which doesn&#39;t have a standard and want to deploy one.&lt;br /&gt;
&amp;nbsp; 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.&lt;br /&gt;
&amp;nbsp; Yet, a standard can prevent some bugs because it forces a programmer to follow some good practices that people normally doesn&#39;t do, like always open and close braces, even in a &lt;b&gt;if &lt;/b&gt;with only one statement.&lt;br /&gt;
&amp;nbsp; Indeed, this book shows some goods practices like:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Never leave a code with comments. We should comment code with #if 0&lt;/li&gt;
&lt;li&gt;Use inline functions instead of macros&lt;/li&gt;
&lt;li&gt;Always use parentheses and don&#39;t rely in C&#39;s operator precedence&lt;/li&gt;
&lt;li&gt;Use of &lt;a href=&quot;http://www.stack.nl/~dimitri/doxygen/&quot;&gt;doxygen&lt;/a&gt;&amp;nbsp;to document code&lt;/li&gt;
&lt;li&gt;Create the comments before begins to code once we have to know what the functions must do before start coding.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&amp;nbsp; Of course there are some suggestions that I&#39;m not agree like:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Use only 80 columns for code&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp; I think that nowadays we have big screens and the IDE is much better than before, so I don&#39;t see any problem in use more than 80 columns.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Use goto, continue or break.&lt;/li&gt;
&lt;/ul&gt;
I understand that the use of this keywords can lead to &quot;spaguetti&quot; code, but if you really &amp;nbsp;know what are you doing, I don&#39;t think that you&#39;ll have problems.&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; 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.&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo</description><link>http://marcelojoeng.blogspot.com/2012/06/michael-barr-embedded-c-coding-standard.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKHt4G5nRTu3ZVVEROhH14ovxWjGOF7MUBurTJ5y5BbCjr4ImBogUVWR53O-cgJqeyOvHw037mnGL5oqxByNkxY8pLSrsdjsPy7J-LXCCG3VzddLH5CmuScWOjBp6rmjmiovrF8fSWVg62/s72-c/images.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-7137455906814969252</guid><pubDate>Fri, 11 May 2012 04:03:00 +0000</pubDate><atom:updated>2012-05-10T21:07:54.307-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">FPGA</category><title>FPGA hello world - Led blink - Part III</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Hello everybody!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;As promissed a century ago, in this post I&#39;ll show how to assign pins to our FPGA hello world, aka Led blink, how to generate our bitstream and how to program our FPGA. So let&#39;s do it!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; We have two choices:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 1) In menu Tools/PlanAhead - Pre-synthesis or&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; 2) In the design windows, in User Constraints, just double click in I/O Pin Planning (PlanAhead) - Pre-synthesis

  In both cases, it will ask you to create an UCF file. Accept it by clicking Yes.
  &lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVh5sp06NJu9YC-TLvg2o7EgETlwvETKZnwHBEaldiVTgDnRC6nCRMeDzJ2ahbBTKoW3asOIH7w5qlTmbbCOAxfUYf3JO40sFoYpSNnQyYOlbStKcf4ygitwMaiHodPQ60keZxJTbQgB2R/s1600/PlanAhead.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVh5sp06NJu9YC-TLvg2o7EgETlwvETKZnwHBEaldiVTgDnRC6nCRMeDzJ2ahbBTKoW3asOIH7w5qlTmbbCOAxfUYf3JO40sFoYpSNnQyYOlbStKcf4ygitwMaiHodPQ60keZxJTbQgB2R/s1600/PlanAhead.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; You&#39;ll note a new file helloworld.ucf, double clicking it will open PlanAhead. We can see all ports that we have declared before:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; led(8) - output&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; clk - input&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; updown - input&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Now it&#39;s time to assign pins to signals. In this board we have:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 0 - R14&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 1 - C3&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 2 - E6&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 3 - D6&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 4 - D13&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 5 - A7&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 6 - G9&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Led 7 - A8&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; clock - C9&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; updown - L13 (switch SW0)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Here we can see in PlanAhead all pins assigned.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaILt0klb5-GwTGByToMUQ7UY38iOMahvLbv6owUkWAJCeyg9Mdon8E7t9RIJBnsxTfzDVDdDsR44UC_0dJ-u7jXI3VOCXgYQBrJgo3PUbn2lyiQZaw67gC1Jj6T1VgF6ky86jt3_EB8-c/s1600/PlanAhead1.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaILt0klb5-GwTGByToMUQ7UY38iOMahvLbv6owUkWAJCeyg9Mdon8E7t9RIJBnsxTfzDVDdDsR44UC_0dJ-u7jXI3VOCXgYQBrJgo3PUbn2lyiQZaw67gC1Jj6T1VgF6ky86jt3_EB8-c/s1600/PlanAhead1.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Note that we have again two options. Using PlanAhead we can click in the Site column and chose which pin to use or ISE, double click in Edit Constraints (Text) and type all constraints. Normally I assing one by PlanAhead and copy the rest in text mode which I think is faster.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Once done we can implement our design by clicking in Implement Design at Design tab in ISE.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Pn7_H_SnUGMb6fpoxOVeSBmupyurLixSSOJxG2XH9CybGg6dE_tY4Zrd9tje7coX_dKyHcxH1M0emXEmkDadSEh6ZbS6CxTL3b4aur2myaCVP2DTAAziC4wRaCvmZOIiCqvDnP2gtJyP/s1600/implement_design.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Pn7_H_SnUGMb6fpoxOVeSBmupyurLixSSOJxG2XH9CybGg6dE_tY4Zrd9tje7coX_dKyHcxH1M0emXEmkDadSEh6ZbS6CxTL3b4aur2myaCVP2DTAAziC4wRaCvmZOIiCqvDnP2gtJyP/s1600/implement_design.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Now it&#39;s time to generate our programming file by clicking in Generate Programming File (durrr). Once done, we click in Configure Target Device which will opens Impact. It will ask you to create a new project file, just click Yes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; Go to menu Edit/Launch Wizard. Select Configure devices using Boundary-Scan (JTAG)&amp;nbsp;and select our helloworld.bit file. Bypass all 3 others devices. In the next window, check Pulse PROG, click in Apply and OK.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRODgHQJYxsCqb_IjtCwVFDwjPj3EDaOnVqA_X0E0WWQN2WpjqKA61Gg6JE22tWNA2DGzgX1PF47WIkFikRpigMXHjdK_28SR5u4Q0eU8tVTrRZCsBwiAN1qNmmJp5n39x2ouRKd63_BJ6/s1600/impact.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRODgHQJYxsCqb_IjtCwVFDwjPj3EDaOnVqA_X0E0WWQN2WpjqKA61Gg6JE22tWNA2DGzgX1PF47WIkFikRpigMXHjdK_28SR5u4Q0eU8tVTrRZCsBwiAN1qNmmJp5n39x2ouRKd63_BJ6/s640/impact.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; In the image above we can see that our FPGA is assigned with helloworld.bit and the others 3 device were bypassed. Now right-click over the green FPGA and select Program.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; And it&#39;s done! (I really wish that your leds are blinking!!! LOL)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&amp;nbsp; Marcelo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://marcelojoeng.blogspot.com/2012/05/fpga-hello-world-led-blink-part-iii.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVh5sp06NJu9YC-TLvg2o7EgETlwvETKZnwHBEaldiVTgDnRC6nCRMeDzJ2ahbBTKoW3asOIH7w5qlTmbbCOAxfUYf3JO40sFoYpSNnQyYOlbStKcf4ygitwMaiHodPQ60keZxJTbQgB2R/s72-c/PlanAhead.jpeg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-3604826493705343128</guid><pubDate>Fri, 11 May 2012 04:02:00 +0000</pubDate><atom:updated>2012-05-10T21:06:43.807-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">FPGA</category><title>FPGA hello world - Led blink - Part II</title><description>&amp;nbsp; Hello!&lt;br /&gt;
&amp;nbsp; In this post I&#39;ll show you how to simulate our hello world design.&lt;br /&gt;
&amp;nbsp; In ISE, in Design tab, select View Simulation as in the image below&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiof6D4QqiRdiP6ew3CvOD0KF2xUUFP89XXame8V60pqu4ljFDY4nRds9IhkhzEr-tOqw69dpm9hpVf_M7IujStfQh51Bqb_upvjC96Ut6MoPgiXIrVTMfsa-V6_QnDdAt7jxw5vkc9QK1u/s1600/simulation.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiof6D4QqiRdiP6ew3CvOD0KF2xUUFP89XXame8V60pqu4ljFDY4nRds9IhkhzEr-tOqw69dpm9hpVf_M7IujStfQh51Bqb_upvjC96Ut6MoPgiXIrVTMfsa-V6_QnDdAt7jxw5vkc9QK1u/s1600/simulation.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&amp;nbsp; Now we &quot;compile&quot; our design as usual. First we select in Hierarchy our helloworld entity and click first in Behavioral Check Syntax and then Simulate Behavioral Model.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXzmUsUi-ySlA3hZJ0em2h8WoqPMQOSv54JFUwhU6DTWqGz_rytIp6Xo0zHAwdYvOILFX-rO7OjNm9S3K5AdyamoZxETGLvYocc4a2AYtGigoq_5zXWFHNkqTL86OtOBl2r4z8DPGwq3WL/s1600/simulation1.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXzmUsUi-ySlA3hZJ0em2h8WoqPMQOSv54JFUwhU6DTWqGz_rytIp6Xo0zHAwdYvOILFX-rO7OjNm9S3K5AdyamoZxETGLvYocc4a2AYtGigoq_5zXWFHNkqTL86OtOBl2r4z8DPGwq3WL/s1600/simulation1.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&amp;nbsp; After click in Simulate, a new program will be launch - ISim.We&#39;ll have all signals defined in our design there.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsM5nRdDfaVRjNDgYDDqXDLLRXi_7jxWEioRSV9kaTjGxR4wm_h_-MU0ES_Iz9s4CZhRG_c7EKa1mJm5jAWwYOQi8ViKHhlfBmixY7Uw94PKan5dYdqbn5RJqKSlW9MnkNHFJdj6RyzwFq/s1600/isim.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsM5nRdDfaVRjNDgYDDqXDLLRXi_7jxWEioRSV9kaTjGxR4wm_h_-MU0ES_Iz9s4CZhRG_c7EKa1mJm5jAWwYOQi8ViKHhlfBmixY7Uw94PKan5dYdqbn5RJqKSlW9MnkNHFJdj6RyzwFq/s1600/isim.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; We select all signals and we add them to wave window. We can drag and drop them or right clicking all selected signals and selection Add to wave window.&lt;br /&gt;
&amp;nbsp; We need to create our clock signal by right-clicking in clk signal and selecting Force Clock. In our case 50MHz has a 20ns period. We set our updown to 0 first and then to 1 to see what happens. Here I also changed blink_freq to 1000000 to be able to show you the results (1 Hz is an eternity for our FPGA). Click in run and that&#39;s it!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyd9xGJpwwmPzAkPkml6kraD3uWuUFdueNxgmJx6Nx5O1itkU9qzmJYRxwFcAHggpwlwjnGyN1rIb8IW8PfnXZxQn1jKQeJB_nHrkIbOKPxJLj-IxBSFUzqbSava4or9sKhyieKTp84PTL/s1600/isim1.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyd9xGJpwwmPzAkPkml6kraD3uWuUFdueNxgmJx6Nx5O1itkU9qzmJYRxwFcAHggpwlwjnGyN1rIb8IW8PfnXZxQn1jKQeJB_nHrkIbOKPxJLj-IxBSFUzqbSava4or9sKhyieKTp84PTL/s640/isim1.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;We can see that we&#39;re decreasing our led value when updown = 0 and increasing when updown = 1. The updown value changes in the blue cursor.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Next post, I&#39;ll show how to configurate our FPGA and finally see our leds blink!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Bye&lt;br /&gt;
&amp;nbsp;Marcelo</description><link>http://marcelojoeng.blogspot.com/2012/05/fpga-hello-world-led-blink-part-ii.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiof6D4QqiRdiP6ew3CvOD0KF2xUUFP89XXame8V60pqu4ljFDY4nRds9IhkhzEr-tOqw69dpm9hpVf_M7IujStfQh51Bqb_upvjC96Ut6MoPgiXIrVTMfsa-V6_QnDdAt7jxw5vkc9QK1u/s72-c/simulation.jpeg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-4901462696753700820</guid><pubDate>Mon, 16 Jan 2012 04:26:00 +0000</pubDate><atom:updated>2012-05-10T20:19:30.913-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">FPGA</category><category domain="http://www.blogger.com/atom/ns#">VHDL</category><title>FPGA hello world - Led blink</title><description>&amp;nbsp; Hello guys!&lt;br /&gt;
&amp;nbsp; Let&#39;s do our first design using the demo board.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; I&#39;ll explain step-by-step how to create a new project, develop our code and synthesize it using ISE 13.3 installed in the&amp;nbsp;&lt;a href=&quot;http://marcelojoeng.blogspot.com/2012/01/installing-ise-133-webpack-in-ubuntu.html&quot;&gt;last post.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 1) First we have to create a project.&lt;span style=&quot;background-color: transparent;&quot;&gt;Go to File &amp;gt; New Project...&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Name: helloworld&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Top-level source type: HDL&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 2) Then we have to select device&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Family: Spartan3E&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Device: XC3S1600E&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Package: FG320&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Speed: -4&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Simulator: Isim(VHDL/Verilog)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Preferred Language: VHDL&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; VHDL Source Analysis Standard: VHDL-200X&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 3) Now at panel left &quot;Design&quot;, right click over : xc3s1600e-4fg320 and select &quot;New source...&quot;&lt;br /&gt;
&amp;nbsp; 4) Select &quot;VHDL module&quot; and type filename: helloworld.&lt;br /&gt;
&amp;nbsp; 5) We don&#39;t need to enter right now the port name. We can define after in the code. Click NEXT and then FINISH.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Now we can start make some code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot; false;=&quot;&quot; name=&quot;code&quot; toolbar:=&quot;&quot;&gt;library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity helloworld is
&amp;nbsp; &amp;nbsp;port (clk : in STD_LOGIC := &#39;0&#39;;
&amp;nbsp; &amp;nbsp; &amp;nbsp; led : out &amp;nbsp;STD_LOGIC_VECTOR (7 downto 0) := (others =&amp;gt; &#39;0&#39;);
&amp;nbsp; &amp;nbsp; &amp;nbsp; updown : in STD_LOGIC := &#39;1&#39;
&amp;nbsp; &amp;nbsp; &amp;nbsp; );
end helloworld;

architecture Behavioral of helloworld is
&amp;nbsp; &amp;nbsp;constant CLK_FREQ : integer := 50000000;
&amp;nbsp; &amp;nbsp;constant BLINK_FREQ : integer := 1;
&amp;nbsp; &amp;nbsp;constant CNT_MAX : integer := CLK_FREQ/BLINK_FREQ/2-1;
&amp;nbsp; &amp;nbsp;signal value : std_logic_vector (7 downto 0) := &quot;00000000&quot;;
&amp;nbsp; &amp;nbsp;signal cnt : unsigned (24 downto 0) := (others =&amp;gt; &#39;0&#39;);
begin

&amp;nbsp; &amp;nbsp;process(clk)
&amp;nbsp; 
&amp;nbsp; &amp;nbsp;begin
&amp;nbsp; &amp;nbsp; &amp;nbsp; if rising_edge(clk) then
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if cnt = CNT_MAX then
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cnt &amp;lt;= (others =&amp;gt;&#39;0&#39;);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case updown is
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when &#39;1&#39; =&amp;gt; value &amp;lt;= std_logic_vector(unsigned(value) + 1);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when others =&amp;gt; value &amp;lt;= std_logic_vector(unsigned(value) - 1);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end case;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cnt &amp;lt;= cnt + 1;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end if;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end if;
&amp;nbsp; &amp;nbsp;end process;
&amp;nbsp; 
&amp;nbsp; &amp;nbsp;led &amp;lt;= value;
&amp;nbsp; 
end Behavioral;
&lt;/pre&gt;
&lt;br /&gt;
This program is very simple. The leds will count in binary mode, upwards when updown is &#39;1&#39; and downwards when &#39;0&#39;.&lt;br /&gt;
&lt;span style=&quot;background-color: transparent;&quot;&gt;At lines 1, 2 and 6, as like in C the #include statement. The STD_LOGIC_1164 define most of standard logic levels like high, low, Z, X, etc. The NUMERIC_STD is used to be able to use functions with signed and unsigned types.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We define our entity at line 13 and it has only 3 pins: &lt;b&gt;clk, led &lt;/b&gt;and &lt;b&gt;updown&lt;/b&gt;&amp;nbsp;where &lt;b&gt;clk&lt;/b&gt; and &lt;b&gt;updown&lt;/b&gt; are input type and led an 8 bits output type.&lt;br /&gt;
As our circuit is a&amp;nbsp;synchronized&amp;nbsp;one, we will perform some action only in a rising edge of clock. It&#39;s done at line 28 with the reserved word &lt;b&gt;rising_edge&lt;/b&gt;.&lt;br /&gt;
And finally, as our clock use a 50MHz crystal, we have to have a pre-scale counter to be able to see the leds changing, otherwise, we would see the 8 leds always on. We use for this purpose the signal &lt;b&gt;cnt &lt;/b&gt;that counts from 0 until&amp;nbsp;CNT_MAX.&lt;br /&gt;
Now, to synthesize our circuit, select View: Implementation and menu &lt;b&gt;Process &amp;gt; Implement Top Module&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikqyWTlO0gCAGNg6A96r4Y9VpGyocqCRZbKg2iUqFsI0-aBMvXwObNwWkpkrrftSmn6qlcN9ExVGFLzK9X4q8ftl7JxL1y3Mw7Z_meu3t2AeRzxKkv_fw2kM1BBv1J1-ACBrflr3JBpQlW/s1600/simulation.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikqyWTlO0gCAGNg6A96r4Y9VpGyocqCRZbKg2iUqFsI0-aBMvXwObNwWkpkrrftSmn6qlcN9ExVGFLzK9X4q8ftl7JxL1y3Mw7Z_meu3t2AeRzxKkv_fw2kM1BBv1J1-ACBrflr3JBpQlW/s320/simulation.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It will take a while because synthesize a circuit is very different of compiling a code. If you want to know more about, there are lots of sites out there that explains the difference. Just google it!&lt;br /&gt;
Next post I&#39;ll show you how to simulate our design, how to assign to the physical pins&amp;nbsp;the signals that we defined in our code, how to generate the bitstream that will be programmed in the FPGA and finally how to program the FPGA demo board!&lt;br /&gt;
&lt;br /&gt;
Marcelo</description><link>http://marcelojoeng.blogspot.com/2012/01/fpga-hello-world-led-blink.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikqyWTlO0gCAGNg6A96r4Y9VpGyocqCRZbKg2iUqFsI0-aBMvXwObNwWkpkrrftSmn6qlcN9ExVGFLzK9X4q8ftl7JxL1y3Mw7Z_meu3t2AeRzxKkv_fw2kM1BBv1J1-ACBrflr3JBpQlW/s72-c/simulation.jpeg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-5987898578322987273</guid><pubDate>Sun, 02 Oct 2011 03:11:00 +0000</pubDate><atom:updated>2011-10-05T21:10:10.729-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">FPGA</category><category domain="http://www.blogger.com/atom/ns#">tools</category><title>Spartan 3E demo board</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlbL8_OvxeQLBOLaB6fu5bqTn8NOfK8MwWbQ9U4xC8Ws2ZykpzWIMR2J-SbtPbwvpLg3qxYJttztcpIcLGtkLgaiquoPuxaemqp0JtVxF_-5k2uw0TLttRtprRDAS0tgnyFA1JvR3pxcI/s1600/TILE_S3E1600_150.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlbL8_OvxeQLBOLaB6fu5bqTn8NOfK8MwWbQ9U4xC8Ws2ZykpzWIMR2J-SbtPbwvpLg3qxYJttztcpIcLGtkLgaiquoPuxaemqp0JtVxF_-5k2uw0TLttRtprRDAS0tgnyFA1JvR3pxcI/s1600/TILE_S3E1600_150.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Hello people,&lt;br /&gt;
As I said, I&#39;m studying FPGA/VHDL and for that I have a spartan 3E demo board from&amp;nbsp;&lt;a href=&quot;http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,793&amp;amp;Prod=S3E1600&quot;&gt;Digilent&lt;/a&gt;. It&#39;s a very nice demo board and it has everything that it takes to program the FPGA (no need of special cable).&lt;br /&gt;
I&#39;m using ISE 13.1 web edition. It&#39;s free and I can do everything I want in this demo board with that version.&lt;br /&gt;
I&#39;ll stop studying embedded linux for while and focus in FPGA because I have to develop some projects in my current work! =D&lt;br /&gt;
Next posts I&#39;ll show you how we use ISE, how simulate, how program the FPGA and of course some examples of what I&#39;m working.&lt;br /&gt;
&lt;br /&gt;
Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/10/spartan-3e-demo-board.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlbL8_OvxeQLBOLaB6fu5bqTn8NOfK8MwWbQ9U4xC8Ws2ZykpzWIMR2J-SbtPbwvpLg3qxYJttztcpIcLGtkLgaiquoPuxaemqp0JtVxF_-5k2uw0TLttRtprRDAS0tgnyFA1JvR3pxcI/s72-c/TILE_S3E1600_150.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-3864203187384262639</guid><pubDate>Mon, 26 Sep 2011 03:07:00 +0000</pubDate><atom:updated>2011-09-25T20:07:47.446-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tools</category><title>Rigol DS1052E</title><description>&amp;nbsp; Hello everybody!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha-JA_UKqhl300ELfQqJzVCUG7zqEbnwyndS3P-PX-iGR2qTUZwzKMswNptdXbtrcwzztRlqSL12ZWhMm6fV8v-nCfoj1Byb54yWxSvjHGnmSP8OFSfRfKMs1OXaL1eB7d0pf0R3Wlqct-/s1600/images.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha-JA_UKqhl300ELfQqJzVCUG7zqEbnwyndS3P-PX-iGR2qTUZwzKMswNptdXbtrcwzztRlqSL12ZWhMm6fV8v-nCfoj1Byb54yWxSvjHGnmSP8OFSfRfKMs1OXaL1eB7d0pf0R3Wlqct-/s1600/images.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; I would like to tell you a little about my new scope - Rigol DS1052E. I read about it at &lt;a href=&quot;http://www.eevblog.com/&quot;&gt;EEV blog&lt;/a&gt; and I decided to give it a try. I&#39;m very well surprised because it&#39;s a very nice scope and it costs about $350, what&#39;s is a bargain!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;I bought it at &lt;a href=&quot;http://www.dealextreme.com/&quot;&gt;dealextreme&lt;/a&gt;&amp;nbsp;and it took less than a month to arrive here. Actually I took about 15 days using EMS.&lt;br /&gt;
&lt;br /&gt;
If you google a little bit you&#39;ll discover that there is a hack to increase its bandwidth from 50MHz to 100MHz. It&#39;s very well explained &lt;a href=&quot;http://www.eevblog.com/2010/03/31/eevblog-70-turn-your-rigol-ds1052e-oscilloscope-into-a-100mhz-ds1102e/&quot;&gt;here&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://www.eevblog.com/2010/04/18/eevblog-77-rigol-ds1052e-ds1102e-oscilloscope-hack-update/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
My Rigol&#39;s version was 2.05SP2 and everything worked and now I&#39;m very happy with my new scope @ 100MHz.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/09/rigol-ds1052e.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha-JA_UKqhl300ELfQqJzVCUG7zqEbnwyndS3P-PX-iGR2qTUZwzKMswNptdXbtrcwzztRlqSL12ZWhMm6fV8v-nCfoj1Byb54yWxSvjHGnmSP8OFSfRfKMs1OXaL1eB7d0pf0R3Wlqct-/s72-c/images.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-378000283301257158</guid><pubDate>Sat, 18 Jun 2011 05:10:00 +0000</pubDate><atom:updated>2012-05-11T08:02:51.972-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><title>Creating jffs2 image</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzwGRkFDVBWMopa5VXl4PSn8iPdRbfZFbFh51cM0BxePDZidNlrM3xkz9udMm3UrAEMB41fvzIEGx8LRJwZkLlhJMz4vlmQjHd4oOEXrAKKtDdsjqmVDrWR68C6MKho4hiRl09TMhsbij/s1600/images.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzwGRkFDVBWMopa5VXl4PSn8iPdRbfZFbFh51cM0BxePDZidNlrM3xkz9udMm3UrAEMB41fvzIEGx8LRJwZkLlhJMz4vlmQjHd4oOEXrAKKtDdsjqmVDrWR68C6MKho4hiRl09TMhsbij/s1600/images.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;Hello people!&amp;nbsp;&amp;nbsp; Last time I wrote that we had some problems in generating jffs2 file system image. So I read on the internet about a bug when using -v option in mkfs.jffs2. I tried to generate the jffs2 image by taping the command and I think that I got it.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
So, you&#39;ll need:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- mkfs.jffs2 (from mtd-tools)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- file system (it&#39;s generated when compiling uClinux in the uClinux-dist directory named as romfs)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- dev_table.txt (located at uClinux/vendors/EmbeddedArtists/LPC2468OEM_Board/dev_table.txt)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
To better comprehension let&#39;s copy dev_table.txt to uClinux-dist directory:&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;cd uClinux-dist
cp ./vendors/EmbeddedArtists/LPC2468OEM_Board/dev_table.txt ./
&lt;/pre&gt;Now let&#39;s generate the jffs2 image by taping:&lt;/div&gt;&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;mkfs.jffs2 -d ./romfs -D ./dev_table.txt -l -o ./images/jffs2.img -e 128 -n -m none -p&lt;/pre&gt;If you want to understand what we are doing, take a look on&amp;nbsp;&lt;a href=&quot;http://linux.die.net/man/1/mkfs.jffs2&quot;&gt;mkfs.jffs2 man page&lt;/a&gt;, it&#39;s not that complicated!&lt;br /&gt;
&lt;br /&gt;
That&#39;s it!&lt;br /&gt;
Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/06/creating-jffs2-image.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzwGRkFDVBWMopa5VXl4PSn8iPdRbfZFbFh51cM0BxePDZidNlrM3xkz9udMm3UrAEMB41fvzIEGx8LRJwZkLlhJMz4vlmQjHd4oOEXrAKKtDdsjqmVDrWR68C6MKho4hiRl09TMhsbij/s72-c/images.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-3698320718590928126</guid><pubDate>Tue, 14 Jun 2011 18:23:00 +0000</pubDate><atom:updated>2012-05-11T08:02:51.973-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><category domain="http://www.blogger.com/atom/ns#">LPC2468</category><category domain="http://www.blogger.com/atom/ns#">toolchain</category><title>Compiling uClinux with kernel linux-2.6.21</title><description>Hello everybody!&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEyK0G6JJ8h0UoB2TL2qtmQs3Tup9_60ProOzoPY3IuOkw2ps3StGMrXJ8E8RGaxv1aOvghuBAcmACFUgmKmCnw4faHKrjokdHZwAPbZpjjXNqmue34iXBWayGzzMmLd7MUunjV1ykSnkQ/s1600/menuconfig.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEyK0G6JJ8h0UoB2TL2qtmQs3Tup9_60ProOzoPY3IuOkw2ps3StGMrXJ8E8RGaxv1aOvghuBAcmACFUgmKmCnw4faHKrjokdHZwAPbZpjjXNqmue34iXBWayGzzMmLd7MUunjV1ykSnkQ/s200/menuconfig.JPG&quot; width=&quot;195&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Today I&#39;ll show you what I did to compile the kernel.. First of all I&#39;m assuming that you&lt;br /&gt;
have already installed build-essentials and mtd-tools packages.&lt;br /&gt;
Now let&#39;s begin the hard work! =D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 1) Download all these packages:&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20070130.tar.gz&quot;&gt;uClinux-dist-20070130.tar.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://www.arbeitech.com.br/uClinux/ea-uClinux-081020.diff.gz&quot;&gt;ea-uClinux-081020.diff.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://www.arbeitech.com.br/uClinux/ea-v3_1_incr1.diff.gz&quot;&gt;ea-v3_1_incr1.diff.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.gz&quot;&gt;linux-2.6.21.tar.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20061213.tar.gz&quot;&gt;arm-linux-tools-20061213.tar.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://opensrc.sec.samsung.com/download/arm-elf-tools-20040427.sh&quot;&gt;arm-elf-tools-20040427.sh&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://www.arbeitech.com.br/uClinux/mkimage&quot;&gt;mkimage&lt;/a&gt;&amp;nbsp;(used to generate uLinux.bin)&lt;br /&gt;
&lt;br /&gt;
2) untar toolchain 1. (It will untar in the same directory where you download it. I add this path to the $PATH)&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;tar -zxvf arm-linux-tools-20061213.tar.gz
export PATH=$PATH:path-to-the-download-directory/usr/local/bin
&lt;/pre&gt;&lt;b&gt;&lt;br /&gt;
Note: You can either move this directory to a directory in the PATH or add the path into the $PATH in your /home/user/.bashrc. In this way you don&#39;t have to export everytime you open a new console.&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
install toolchain 2.&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;./arm-elf-tools-20040427.sh
&lt;/pre&gt;I had a problem when installing this toolchain. If you get an error too, edit this file and try changing:&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
&lt;/pre&gt;by&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;tail -n +43 ${SCRIPT} | gunzip | tar xvf -
&lt;/pre&gt;Copy mkimage to /usr/local/bin and set it as executable&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;sudo chmod +x /usr/local/bin/mkimage
&lt;/pre&gt;&lt;br /&gt;
3) untar uClinux and then remove old kernel&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;tar -zxvf uClinux-dist-20070130.tar.gz
rm -r ./uClinux-dist/linux-2.*
&lt;/pre&gt;4) untar linux-2.6.21 and move it to uClinux-dist&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;tar -zxvf linux-2.6.21
mv ./linux-2.6.21 ./uClinux-dist/linux-2.6.x
&lt;/pre&gt;5) apply both patchs&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;cd ./uClinux-dist
gunzip -c ../ea-uClinux-081029.diff.gz | patch –p1
gunzip -c ../ea-v3_1_incr1.diff.gz | patch –p1
&lt;/pre&gt;6) Configure &amp;amp; Compile.&lt;br /&gt;
a)Choose vendor Embedded Artists and board LPC2468&lt;br /&gt;
b)Disable i2c in device drivers &amp;gt; I2C support &amp;gt; &amp;lt;&amp;gt; I2C support&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;make menuconfig
make ARCH=arm CROSS_COMPILE=arm-elf-
&lt;/pre&gt;After make, you will get an error. You must include &amp;lt;linux/limits.h&amp;gt;&amp;nbsp;&amp;nbsp;in the file ./linux-2.6.x/scripts/mod/sumversion.c. Make again and go take a coffe.&lt;br /&gt;
The images will be in the folder ./images&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot; toolbar: false;&gt;-rw-r--r--  1 user user 1012K 2011-06-14 14:13 cramfs.img
-rw-r--r--  1 user user  4.2M 2011-06-14 14:13 image.bin
-rw-r--r--  1 user user     0 2011-06-14 14:13 jffs2.img
-rwxr-xr-x  1 user user  162K 2011-06-14 14:13 linux.data
-rw-r--r--  1 user user  1.1M 2011-06-14 14:13 linux.gz
-rwxr-xr-x  1 user user  2.1M 2011-06-14 14:13 linux.text
-rw-r--r--  1 user user  1.9M 2011-06-14 14:13 romfs.img
-rw-r--r--  1 user user  1.1M 2011-06-14 14:13 uLinux.bin
&lt;/pre&gt;&lt;br /&gt;
It&#39;s weird that we need 2 toolchain... I don&#39;t know why, but arm-linux- is used to compile the kernel (actually the kernel complains that the toolchain arm-elf is too old). It has been forced to, even if you set CROSS_COMPILE=arm-elf-. The rest is compiled with arm-elf-, so, be sure that both toolchain is in the path.&lt;br /&gt;
&lt;br /&gt;
Until today, jffs2 file system can&#39;t be generated following these instructions. I&#39;ll check later! =D&lt;br /&gt;
&lt;br /&gt;
Next post we&#39;ll update u-boot and boot the kernel! Wait and you&#39;ll see! =D&lt;br /&gt;
That&#39;s all&lt;br /&gt;
&lt;br /&gt;
Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/06/compiling-kernel-linux-2621.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEyK0G6JJ8h0UoB2TL2qtmQs3Tup9_60ProOzoPY3IuOkw2ps3StGMrXJ8E8RGaxv1aOvghuBAcmACFUgmKmCnw4faHKrjokdHZwAPbZpjjXNqmue34iXBWayGzzMmLd7MUunjV1ykSnkQ/s72-c/menuconfig.JPG" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-4422340787194962180</guid><pubDate>Fri, 10 Jun 2011 21:29:00 +0000</pubDate><atom:updated>2012-05-11T08:02:51.973-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><category domain="http://www.blogger.com/atom/ns#">LPC2468</category><category domain="http://www.blogger.com/atom/ns#">toolchain</category><title>Toolchain for ARM</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj17veSWeGuPPG-ZRFwEeubOQiQWI_Au6WSTWHEOY72d3hhJ04g4hVeO89eHJX6aLNXzPDQz4QP7MLxj2JF5DUhx1TnBe-jZbeAblhq3gteRMhjEgTfDuVO72RaVhyxVrbKxAH1TxFt1m6j/s1600/images.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj17veSWeGuPPG-ZRFwEeubOQiQWI_Au6WSTWHEOY72d3hhJ04g4hVeO89eHJX6aLNXzPDQz4QP7MLxj2JF5DUhx1TnBe-jZbeAblhq3gteRMhjEgTfDuVO72RaVhyxVrbKxAH1TxFt1m6j/s200/images.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; Hi people,&lt;br /&gt;
&amp;nbsp; I&#39;m following some instructions from Embedded Artists to build my own toolchain, compile and upgrade board&#39;s u-boot.&amp;nbsp;I&#39;m working with Kubuntu 11.04 and using the followings packages:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; - u-boot 1.16 with 2 incremental patchs from EA.&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20070130.tar.gz&quot;&gt;uClinux-dist-20070130.tar.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; - kernel&amp;nbsp;&lt;a href=&quot;ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.gz&quot;&gt;linux-2.6.21&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20061213.tar.gz&quot;&gt;arm-linux-tools-20061213.tar.gz&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; -&amp;nbsp;&lt;a href=&quot;http://opensrc.sec.samsung.com/download/arm-elf-tools-20040427.sh&quot;&gt;arm-elf-tools-20040427.sh&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; It&#39;s strange that we need two toolchains, arm-linux and arm-elf. Actually I couldn&#39;t compile the kernel yet and than I downloaded the uLinux.bin and romfs.img from EA website.&lt;br /&gt;
&amp;nbsp; We can&#39;t compile the kernel with arm-elf because this toolchain is too old (according to error message). So we have to compile the kernel using arm-linux. I&#39;m not sure yet why two toolchain.. anyway we move on... =D&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/06/toolchain-for-arm.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj17veSWeGuPPG-ZRFwEeubOQiQWI_Au6WSTWHEOY72d3hhJ04g4hVeO89eHJX6aLNXzPDQz4QP7MLxj2JF5DUhx1TnBe-jZbeAblhq3gteRMhjEgTfDuVO72RaVhyxVrbKxAH1TxFt1m6j/s72-c/images.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-7246861683795595655</guid><pubDate>Fri, 10 Jun 2011 20:36:00 +0000</pubDate><atom:updated>2012-05-11T08:02:51.974-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><category domain="http://www.blogger.com/atom/ns#">LPC2468</category><title>Embedded artists LPC2468 demo board</title><description>&amp;nbsp; Hi people,&lt;br /&gt;
&amp;nbsp; I&#39;m currently working on the LPC2468 board from Embedded Artists.&amp;nbsp;This is an overview of the board and processor:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQbdd6O8pfv_iC_OJts9s2IR4q-7kDBMzgguUEjNH-CnNStXUGmdNM7-idQ338a6i30xbea9pPqBduSg6afNP6NXm033XiZ_nWeI0CupbdhbZiaaZJ7b1KzAHXPY3CiiFxPf-7V-y0yc3e/s1600/lpc2468_16_kit_350.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;246&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQbdd6O8pfv_iC_OJts9s2IR4q-7kDBMzgguUEjNH-CnNStXUGmdNM7-idQ338a6i30xbea9pPqBduSg6afNP6NXm033XiZ_nWeI0CupbdhbZiaaZJ7b1KzAHXPY3CiiFxPf-7V-y0yc3e/s320/lpc2468_16_kit_350.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; LPC2468&lt;br /&gt;
&amp;nbsp; - Processor&amp;nbsp;ARM7TDMI-S core with speed up to 72 MHz&lt;br /&gt;
&amp;nbsp; - 512 KB internal flash&lt;br /&gt;
&amp;nbsp; - 98 KB RAM&lt;br /&gt;
&amp;nbsp; - 4xUART, 3xI2C, 2xCAN, 1xSPI, 2xSSP, 1xI2S&lt;br /&gt;
&amp;nbsp; - Full-Speed USB 2.0 Device/Host/OTG&lt;br /&gt;
&amp;nbsp; - 10/100 Ethernet MAC&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Board&lt;br /&gt;
&amp;nbsp; - 128 MB NAND + 4 MB NOR&lt;br /&gt;
&amp;nbsp; - 32 MB SDRAM&lt;br /&gt;
&amp;nbsp; - 256 Kbit I2C E2PROM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#39;s an &quot;old&quot; board that runs uClinux instead of Linux. It comes with u-boot. So, I&#39;m learning how it works and how develop device drivers for it. In the nexts posts I&#39;ll show you what I&#39;m doing with this little board!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/06/embedded-artists-lpc2468-uclinux.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQbdd6O8pfv_iC_OJts9s2IR4q-7kDBMzgguUEjNH-CnNStXUGmdNM7-idQ338a6i30xbea9pPqBduSg6afNP6NXm033XiZ_nWeI0CupbdhbZiaaZJ7b1KzAHXPY3CiiFxPf-7V-y0yc3e/s72-c/lpc2468_16_kit_350.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6820831003345794702.post-6761196636832773203</guid><pubDate>Fri, 10 Jun 2011 16:28:00 +0000</pubDate><atom:updated>2011-06-11T08:14:52.056-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">computer vision</category><category domain="http://www.blogger.com/atom/ns#">Embedded Linux</category><category domain="http://www.blogger.com/atom/ns#">FPGA</category><category domain="http://www.blogger.com/atom/ns#">VHDL</category><title>First Post!</title><description>&amp;nbsp; Hello folks!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; This is my very new post here. Before we start, let me present myself. My name is Marcelo I&#39;m from Brazil but I live in Canada since 2007 (so, I&#39;m sorry for my bad english lol). I&#39;m an electronic engineer graduated at &lt;a href=&quot;http://www.utfpr.edu.br/curitiba&quot;&gt;UTFPR&lt;/a&gt;&amp;nbsp;in 2003 and I work with electronics since 2001.&lt;br /&gt;
&amp;nbsp; My experience is in 8/16 bits systems and that&#39;s why I&#39;m creating this blog.... I&#39;m moving to a 32 bits world with an OS. I would like study FPGA/VHDL and digital image processing too. So, this blog is not only about embedded linux.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Before put hands on dirty, let me show some books that help me a lot to learn about those subjects:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhicsUoMKrYJeAFM1LIGJxP6GgB1bsy0mJ8NE14DJU5rITCl5CHlgLlokPCinLeKVMFGK0hs-0en3UXXY_xtvaVywb6pf3YHpzgPLlgX42jsOqLj5jqI_pE5bUZodHAQoEblks50sPAZDoS/s1600/017a17d4e4e61247e74e976c09834c1d.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhicsUoMKrYJeAFM1LIGJxP6GgB1bsy0mJ8NE14DJU5rITCl5CHlgLlokPCinLeKVMFGK0hs-0en3UXXY_xtvaVywb6pf3YHpzgPLlgX42jsOqLj5jqI_pE5bUZodHAQoEblks50sPAZDoS/s200/017a17d4e4e61247e74e976c09834c1d.jpg&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0137017839/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=1278548962&amp;amp;pf_rd_s=lpo-top-stripe-1&amp;amp;pf_rd_t=201&amp;amp;pf_rd_i=0131679848&amp;amp;pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_r=1YE42GKB49TSS5XZK7VC&quot; target=&quot;blank&quot;&gt;Linux Embedded Primer&lt;/a&gt;&lt;br /&gt;
It&#39;s a very good book that explain in deep about how embedded linux works. As a beginner I enjoyed it a lot.&lt;br /&gt;
It covers linux boot, some boot loaders as u-boot, device driver development basis, kernel debugging technics, etc.&lt;br /&gt;
Actually my friend&amp;nbsp;&lt;a href=&quot;http://www.sergioprado.org/&quot;&gt;Sérgio Prado&lt;/a&gt;&amp;nbsp;told me about this book!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivUMMkPd8K5AOtxERu0v_3LIWeOiFgs1o2Jp1QFPfz6ds8e4DFxCkAJ0xSCnHzHel1ep5PXr98fBLG26KZSdM4kEC8LD77JEVcc9DNu_cNvv7fxtumGrejX9wviunimNaxzHuNgvUl-kIp/s1600/cat.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivUMMkPd8K5AOtxERu0v_3LIWeOiFgs1o2Jp1QFPfz6ds8e4DFxCkAJ0xSCnHzHel1ep5PXr98fBLG26KZSdM4kEC8LD77JEVcc9DNu_cNvv7fxtumGrejX9wviunimNaxzHuNgvUl-kIp/s200/cat.gif&quot; width=&quot;152&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://lwn.net/Kernel/LDD3/&quot; target=&quot;blank&quot;&gt;Linux Device Drivers&lt;/a&gt;&lt;br /&gt;
It&#39;s also a very good book about linux device drivers. It explain in detail about types of device drivers, device driver development techniques, some debugging tools, timers, memory allocation, interrupt handling and of course how to write one. In the link above you can read online this book, so, if you don&#39;t want to buy a copy, you can read it first! I bought one because I think that it&#39;s a good idea have one copy for reference!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_wOwNMqDnfV59QkNGos669c-cut7GcgUkePAsPeoDMy2C64PrKK_o83cuI8AVehDT-vb6DZuGeDLlTfZRckh5ZQjfqb18ReNmg-0Gfp3YZ7_dakRYOrZtS6DMz7PtVagcx_vqQtLNkTR-/s1600/41r01z1fOrL._BO2%252C204%252C203%252C200_PIsitb-sticker-arrow-click%252CTopRight%252C35%252C-76_AA300_SH20_OU01_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_wOwNMqDnfV59QkNGos669c-cut7GcgUkePAsPeoDMy2C64PrKK_o83cuI8AVehDT-vb6DZuGeDLlTfZRckh5ZQjfqb18ReNmg-0Gfp3YZ7_dakRYOrZtS6DMz7PtVagcx_vqQtLNkTR-/s200/41r01z1fOrL._BO2%252C204%252C203%252C200_PIsitb-sticker-arrow-click%252CTopRight%252C35%252C-76_AA300_SH20_OU01_.jpg&quot; width=&quot;155&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672327201&quot; target=&quot;blank&quot;&gt;Linux Kernel Development&lt;/a&gt;&lt;br /&gt;
I have the second edition, but the third edition is already available. I didn&#39;t finish it, but I read some chapters. This book teaches about the linux kernel like process management, process scheduling, system calls, memory management, etc.&lt;br /&gt;
I think that it&#39;s a must have to full understand the kernel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp1g-F3WLEiAmlvuvb9iLE0qB3h2JP0TGpo2EHOdp8RhKodhRuyj2y9Zkx8_TsBkCzbvltQxiSa_xirEsKKHiBhZRcX0z1k_yd4-tQlsI9X_3q2FNj1oNmyKpVxoHcaGl391ZxAQBmIpFk/s1600/Circuit+Design+with+VHDL+.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp1g-F3WLEiAmlvuvb9iLE0qB3h2JP0TGpo2EHOdp8RhKodhRuyj2y9Zkx8_TsBkCzbvltQxiSa_xirEsKKHiBhZRcX0z1k_yd4-tQlsI9X_3q2FNj1oNmyKpVxoHcaGl391ZxAQBmIpFk/s200/Circuit+Design+with+VHDL+.jpg&quot; width=&quot;157&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.cefetpr.br/vhdl/&quot; target=&quot;blank&quot;&gt;Circuit Design with VHDL&lt;/a&gt;&lt;br /&gt;
This book is a good book to learn VHDL. It covers from basic until intermediate level of VHDL. I read once but I have to read again. I thought a good book because it explain the language and after show a example. There is lots of example in the book.&lt;br /&gt;
But this book don&#39;t explain how to program and configurate a FPGA, it&#39;s intend to teach VHDL only. There is a small tutorial in appendix.&lt;br /&gt;
Professor Pedroni was my teacher at university, I did only one course with him and it was about FPGA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQqBexmztYC0eaT-9GjeqlyWB-FlEs_95iSUQADad4yks7TigaXxtuiSdHoTA-cXShRO35uxB-QQDVpZc-_-ucdU-Cmm4PsHH0fcIJPrOL_pEYAxWnsAeVlCsKxqGYX0QiGHeuePwdy160/s1600/51tmcP3n-ML._SL500_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQqBexmztYC0eaT-9GjeqlyWB-FlEs_95iSUQADad4yks7TigaXxtuiSdHoTA-cXShRO35uxB-QQDVpZc-_-ucdU-Cmm4PsHH0fcIJPrOL_pEYAxWnsAeVlCsKxqGYX0QiGHeuePwdy160/s200/51tmcP3n-ML._SL500_.jpg&quot; width=&quot;133&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.amazon.com/FPGA-Prototyping-VHDL-Examples-Spartan-3/dp/0470185317&quot; target=&quot;blank&quot;&gt;FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version&lt;/a&gt;&lt;br /&gt;
Since I have a dev board from Digilent with a Spartan 3, this book is perfect to apply all the knowledge acquired. This book is the hands on, all theorical stuff that we learned with Pedroni&#39;s book, we can apply now.&lt;br /&gt;
If you know already VHDL, this book is very good to learn how to put everything in practice in a FPGA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA7EhPcusD4JXwOLy4WeSSaJ05qRrJdmcIfBT1wgrzUcvfL4rKrjKXRkofVkG0RzIh3b-TaGrluuOtIGGe2ZQgaLSLttiZoJ5jnFOKWO-Pd9VB-nDv_DhF8sMDFbWVI0uyaYw6Y1xja3_t/s1600/0130307963.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA7EhPcusD4JXwOLy4WeSSaJ05qRrJdmcIfBT1wgrzUcvfL4rKrjKXRkofVkG0RzIh3b-TaGrluuOtIGGe2ZQgaLSLttiZoJ5jnFOKWO-Pd9VB-nDv_DhF8sMDFbWVI0uyaYw6Y1xja3_t/s200/0130307963.jpg&quot; width=&quot;140&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.amazon.com/Computer-Vision-Linda-G-Shapiro/dp/0130307963&quot; target=&quot;blank&quot;&gt;Computer Vision&lt;/a&gt;&lt;br /&gt;
I didn&#39;t read this book yet, only firsts chapters. But this book is a good book for everyone that don&#39;t have any knowledge in computer vision, digital image processing, etc. But it&#39;s intend for people who has an engineering background, so, it&#39;s a little technical and it covers more computer vision than image processing techniques (as the title suggest derrrr)&lt;br /&gt;
It covers all the concepts to process an image, it explain concepts about the problems in computer vision systems, images representation, binary images analysis, pattern recognition, filters, image segmentation, image matching, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimOHIcWEEEUHF6n78_SPFvEsU21q08NuWc60ZQgwQgMc8ljDEZJFxYEjeS-6_nyrZjJ932SR7ChhN76smloTmsNT5Uvsv869YO5s2K91TF0ta00dc7vdpet4V8sd4nz1XFHGaJV9qqL9FU/s1600/61826_dip-book.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot; target=&quot;blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimOHIcWEEEUHF6n78_SPFvEsU21q08NuWc60ZQgwQgMc8ljDEZJFxYEjeS-6_nyrZjJ932SR7ChhN76smloTmsNT5Uvsv869YO5s2K91TF0ta00dc7vdpet4V8sd4nz1XFHGaJV9qqL9FU/s200/61826_dip-book.jpg&quot; width=&quot;144&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/013168728X/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=1278548962&amp;amp;pf_rd_s=lpo-top-stripe-1&amp;amp;pf_rd_t=201&amp;amp;pf_rd_i=0201180758&amp;amp;pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_r=1PQZZ2M0S6R8PS019RYK&quot; target=&quot;blank&quot;&gt;Digital Image Processing&lt;/a&gt;&lt;br /&gt;
I didn&#39;t read this book either (no free time). This book is more about image processing and it&#39;s very technical. It teaches from the human eye until object recognition, so it might be very complete. I read several reviews at amazon and people are used to like this book.&lt;br /&gt;
Actually I have a friend who works in this field and he suggested me those two books! =D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#39;s all folks!!!&lt;br /&gt;
&lt;br /&gt;
Marcelo Jo</description><link>http://marcelojoeng.blogspot.com/2011/06/first-post.html</link><author>noreply@blogger.com (Marcelo Jo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhicsUoMKrYJeAFM1LIGJxP6GgB1bsy0mJ8NE14DJU5rITCl5CHlgLlokPCinLeKVMFGK0hs-0en3UXXY_xtvaVywb6pf3YHpzgPLlgX42jsOqLj5jqI_pE5bUZodHAQoEblks50sPAZDoS/s72-c/017a17d4e4e61247e74e976c09834c1d.jpg" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>