Hello,
it works with the include in the header file. Is it necessary to include "mutex.h" in the code and header file? Why doesn't work it, if I include "mutex.h" only in the code file?
My code file below:
#include "mcf52259.h"
#include "mmm52259typ.h"
#include "mmm52259map.h"
#include <mqx.h>
#include <bsp.h>
#include "mutex.h"
#include "pinbelegung.h"
#include "gpio_shiftregister.h"
//------------------------------------------------------------------//
// Mutexes //
//------------------------------------------------------------------//
MUTEX_STRUCT Mutex_shiftreg; // Mutex fuer das Shiftregister
//------------------------------------------------------------------//
// Globale Variablen //
//------------------------------------------------------------------//
uint16 value_sr; // Abbild fuer die Porterweiterung mit Shiftregister
//------------------------------------------------------------------//
// Outputs //
//------------------------------------------------------------------//
// Port DD
t_gpio Shift_data;
t_gpio Blenden_mot_1;
t_gpio Blenden_mot_2;
t_gpio Blenden_mot_3;
t_gpio Blenden_mot_4;
// Port AS
// Port QS
t_gpio Display_data;
t_gpio Display_clk;
t_gpio Display_cs;
// Port TA
t_gpio Abspalt_mot_2;
t_gpio LED_gelb;
t_gpio Vakuum_mot_2;
t_gpio Reset_Messen;
// Port TC
t_gpio Abspalt_mot_1;
t_gpio LED_rot;
t_gpio Vakuum_mot_1;
t_gpio Buzzer;
// Port TE
// Port TF
// Port TG
// Port UC
// Port UB
t_gpio Shift_clk;
// Port UA
t_gpio USB_Vbuse;
// Port AN
// Port NQ
// Port TI
t_gpio Shift_OE;
t_gpio Shift_latch;
t_gpio Lw_kanal_0;
t_gpio Lw_kanal_1;
t_gpio Lw_kanal_2;
t_gpio Display_A0;
// Port TJ
// Port TH
//------------------------------------------------------------------//
// //
// Funktion init_mutex_gpio_sr() //
// //
//------------------------------------------------------------------//
// Mutex des Shiftregister fuer Porterweiterung initialisieren. //
// //
//------------------------------------------------------------------//
// void //
// return: void //
//------------------------------------------------------------------//
void init_mutex_gpio_sr(void)
{
MUTEX_ATTR_STRUCT mutex_attr_shiftreg;
// Initialisieren der Mutexattribute
_mutatr_init(&mutex_attr_shiftreg);
// Initialisieren des Mutex
_mutex_init(&Mutex_shiftreg, &mutex_attr_shiftreg);
}
//------------------------------------------------------------------//
// //
// Funktion set_gpio_sr() //
// //
//------------------------------------------------------------------//
// Ein Ausgang am Shiftregitser setzen. //
// //
//------------------------------------------------------------------//
// uint16: Output der gesetzt werden soll //
// return: void //
//------------------------------------------------------------------//
void set_gpio_sr(uint16 output)
{
uint8 lw;
uint16 tmp_shift = 0x8000;
//--------------------------------------------------------------//
// Mutex sperren, damit der Zugriff auf das Shiftregister von //
// einem anderen Task gesperrt wird. //
//--------------------------------------------------------------//
_mutex_lock(&Mutex_shiftreg);
value_sr |= output;
// Daten durchs Shiftregister abarbeiten //
for(lw = 0; lw<ANZ_OUTPUT_SR; lw++)
{
if(value_sr & tmp_shift) set_gpio(Shift_data);
else clr_gpio(Shift_data);
set_gpio(Shift_clk);
clr_gpio(Shift_clk);
tmp_shift = tmp_shift>>1;
}
// Daten im Shiftregister an die Ausganege legen //
set_gpio(Shift_latch);
clr_gpio(Shift_latch);
//--------------------------------------------------------------//
// Mutex freigeben, damit ein anderer Task wieder auf das //
// Shiftregister zugreifen kann. //
//--------------------------------------------------------------//
_mutex_unlock(&Mutex_shiftreg);
} // Ende set_gpio_sr()
//------------------------------------------------------------------//
// //
// Funktion clr_gpio_sr() //
// //
//------------------------------------------------------------------//
// Ein Ausgang am Shiftregitser zuruecksetzen. //
// //
//------------------------------------------------------------------//
// uint16: Output der zurueckgesetzt werden soll //
// return: void //
//------------------------------------------------------------------//
void clr_gpio_sr(uint16 output)
{
uint8 lw;
uint16 tmp_shift = 0x8000;
//--------------------------------------------------------------//
// Mutex sperren, damit der Zugriff auf das Shiftregister von //
// einem anderen Task gesperrt wird. //
//--------------------------------------------------------------//
_mutex_lock(&Mutex_shiftreg);
value_sr &= ~output;
// Daten durchs Shiftregister abarbeiten //
for(lw = 0; lw<ANZ_OUTPUT_SR; lw++)
{
if(value_sr & tmp_shift) set_gpio(Shift_data);
else clr_gpio(Shift_data);
set_gpio(Shift_clk);
clr_gpio(Shift_clk);
tmp_shift = tmp_shift>>1;
}
// Daten im Shiftregister an die Ausganege legen //
set_gpio(Shift_latch);
clr_gpio(Shift_latch);
//--------------------------------------------------------------//
// Mutex freigeben, damit ein anderer Task wieder auf das //
// Shiftregister zugreifen kann. //
//--------------------------------------------------------------//
_mutex_unlock(&Mutex_shiftreg);
}// Ende clr_gpio_sr()
Thanks for your help
Martin