Go Down

Topic: Semaphores (Read 1 time) previous topic - next topic

fiddler

I want to use 1 bit semaphores for communicating between tasks.
I have searched the site but everything points to semaphores using quite advanced RTOS, which I don't need.

Is there not some sort of framework for using semaphores in Arduino ?

I use Protothread as my cooperative "operating system"

K

Udo Klein

1bit semaphores are very easy to implement. Why do you want a framework for this?
Check out my experiments http://blog.blinkenlight.net

fiddler

#2
Jan 02, 2012, 10:08 am Last Edit: Jan 02, 2012, 10:11 am by fiddler Reason: 1
I'm obviously missing something here :-), not first time.

So, how would I normally declare a bunch of semaphore ?
Can I use an unsigned int, ie 32bit, and declare semaphores from 0 to 31 using labels ?

I see its quite easy to set and clear them using bit() or bitset() etc

Cheers

PaulS

Quote
Can I use an unsigned int, ie 32bit, and declare semaphores from 0 to 31 using labels ?

An unsigned int is 16 bits. Why do you need labels?

fiddler

Oops, yes they are. Unsigned long then.

Couple of reason.
I find it much easier to remember names and the code is usually easier to read when using labels.

Also by using 32bits, it fits my inputs very nicely as i have 32 inputs per channel and 3 channels.

This makes comparisons and bitwise stuff easier.

K

Udo Klein

Of course you can http://en.wikipedia.org/wiki/Bit_field. How come that you know about semaphorse but not about bitfields?
Check out my experiments http://blog.blinkenlight.net

fiddler

I have been using Splat controller for quite a while. www.splatco.com.au
They have a very simple cooperative OS with semaphores.

Quite a bit of free downloadable material their site.

Anyway, this is my first C program, so there is quite a bit of syntax learning to be had.

I'm using Protothread as my "OS" as it appears to be nice and simple (AND completely in C) and I'm just doing a bunch of tasks doing different things to get my head around C.
As I have an Duemilanove (8bit) and Chipkit Max32 (Pic32 bit) board, I can have the same program running on both.  :-)

Task1 is just the blinking LED, task2 is button press with LED on using bit(), task3 is a star delta motor starter, task4 to task8 to be decided.
Trying to use all the Protothread timing functions to understand them.

Cheers
K


Go Up