Brad For Dem Bedded

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Friday, 1 July 2011

Function Pointers

Posted on 10:30 by Unknown
Function pointers are pretty cool. I learned about them this week, then I solved a problem using them.

At work, I'm writing some code for a 16 bit microcontroller. In the system I'm working with, a relatively slow external clock causes an interrupt to be fired off. Inside my code, I have a state machine that executes each time the interrupt fires. The state machine was implemented using a switch statement that contained a reasonable number of cases, one for each possible state.

This worked great, up until I continued to add states. Eventually, the time to determine which state should be executed became about half as long as the period of the external clock. This is bad because it means some of my states may not have enough time to execute before the next interrupt comes along. If that happens, bad things occur and the state machine loses place compared to the rest of the world.

To solve this, I thought there had to be a way to create an array of pointers to functions. Then as I change state - represented as an index into the array - I could just call what ever function is pointed to in the array. It turns out, that's very possible in C. Here's a good tutorial I found.

The assembly code for using an array of function pointers is much shorter than the switch statement code. This gives me more time to execute code in between interrupts and was not hard to implement. Each of the switch statement's cases (states) became a function and at the start of execution an array of function pointers to each function is populated. Within the states the array index can be changed based on inputs or the result of processing data.

Extra documentation can be very helpful when using function pointers. A switch statement is easy to understand but an array of function pointers is a bit more opaque.
Email ThisBlogThis!Share to XShare to FacebookShare to Pinterest
Posted in c | No comments
Newer Post Older Post Home

0 comments:

Post a Comment

Subscribe to: Post Comments (Atom)

Popular Posts

  • Downsides and Upsides of Altera's Configuration Via Protocol
    Yesterday, I wrote a little about reconfigurable FPGAs attached to the PCI-Express bus as an addition to the general purpose computer. The...
  • Toolchain, Check! Kernel, Check!
    I've been working on the CLFS embedded book for a few months now.  I've been learning a lot and my goal has been to get a CLFS embe...
  • KDE4 Sucks
    I upgraded to Debian 6 Squeeze last weekend on my desktop.  I was very excited to get some more up-to-date packages (git, gcc, kernel, and c...
  • Low Cost ARM Computer
    I was thinking about my ARM + FPGA computer idea some more.  There's already a lot of competition in the single board computer space an...
  • Crypto Load Balancer Using Off The Shelf Hardware
    At my day job, I work a reasonable amount of time with cryptographic and authentication systems. Lately, I've been reading about OpenCL...
  • Embedded Linux and Long Term Support / Updates - Part 2
    In my previous post about embedded Linux long term support, I neglected Ubuntu. I had not realized how much effort Canonical are putting i...
  • The TuxedoBoard has a Brain! (picked out)
    I've chosen an ARM SoC (system on chip) for the TuxedoBoard! The Texas Instruments AM1707 ARM9 core will meet my requirements. The AM1...
  • Pick an ARM ABI When Building GCC
    If you follow the CLFS embedded book for ARM , you'll see that your ABI choice isn't used until compiling packages (ie: after you...
  • SanDisk iNAND
    I stumbled upon SanDisk's iNAND products today while doing some searching about SD cards. The iNAND idea looks very appealing to me co...
  • I'm Writing a Book
    I'm writing a book about embedded Linux but I'm not going to compete with traditional technical books.  O'Reilly isn't my co...

Categories

  • beagleboard
  • blog
  • book review
  • business
  • c
  • chairs
  • clfs
  • community
  • computers
  • crypto
  • db
  • debian
  • disapointment
  • embedded
  • energy
  • fedora
  • flash
  • fpga
  • gcc
  • git
  • google
  • health
  • hp
  • internet
  • iOS
  • learning
  • license
  • linux
  • market
  • microsoft
  • movie review
  • my book
  • next steps
  • open source
  • pandaboard
  • rails
  • software
  • SOPA
  • tuxedo
  • web 2.0
  • webOS
  • windows
  • work

Blog Archive

  • ►  2012 (10)
    • ►  January (10)
  • ▼  2011 (70)
    • ►  December (10)
    • ►  November (9)
    • ►  October (7)
    • ►  September (8)
    • ►  August (1)
    • ▼  July (3)
      • Downsides and Upsides of Altera's Configuration Vi...
      • Modular FPGA Accelerated Computing
      • Function Pointers
    • ►  June (3)
    • ►  May (3)
    • ►  April (8)
    • ►  March (4)
    • ►  February (5)
    • ►  January (9)
  • ►  2010 (16)
    • ►  December (6)
    • ►  November (9)
    • ►  October (1)
Powered by Blogger.

About Me

Unknown
View my complete profile