Finally! A question I can answer! :-)
This is a classic problem in OOP. I would recommend the following changes.
// watchdogcontrol.h
class WatchdogControl
{
...
private:
static void* resetWatchdog(void* arg);
...
};
// watchdogcontrol.cpp
void WatchdogControl::startWatchdogMonitor()
{
if (!WatchdogTimerOn); // why this statement?
pthread_t WatchdogMonitorId;
pthread_create (&WatchdogMonitorId, NULL,
&WatchdogControl::resetWatchdog, this);
WatchdogTimerOn = true;
}
static void* WatchdogControl::resetWatchdog(void* arg)
{
sleep(300);
WatchdogControl* pThis = static_cast<WatchdogControl*>(arg);
pThis->setWatchdogTimer();
return NULL;
}
Hope this helps.
Keith Engell
On Jan 22, 2008 1:34 AM, Richard <> wrote:
>
>
>
>
>
>
> Ok here is my source code, the first section is the implementation,
> the second section is the declaration, and the third is the compiler
> error. Any help on this would be appreciated.
>
> /********************** Implementation **********************/
> #include "WatchdogControl.h"
> //Class Constructor, currently being used to set the default timer
> watchdog.
> WatchdogControl::WatchdogControl()
> {
> timerValue = 0x07;
> }
>
> WatchdogControl::~WatchdogControl()
> {
> }
>
> void WatchdogControl::startWatchdogMonitor()
> {
> if (!WatchdogTimerOn);
> pthread_t WatchdogMonitorId;
> pthread_create (&WatchdogMonitorId, NULL, &resetWatchdog, NULL);
> WatchdogTimerOn = true;
> }
>
> void* WatchdogControl::resetWatchdog(void* nothing)
> {
> sleep(300);
> setWatchdogTimer();
> return NULL;
> }
>
> void WatchdogControl::setWatchdogTimer()
> {
> int fd = open("/dev/mem", O_RDWR);
> assert(fd != -1);
>
> wdt_control = (unsigned char
> *)mmap(0,getpagesize(),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x23800000);
> wdt_feed = (unsigned char
> *)mmap(0,getpagesize(),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x23C00000);
>
> *wdt_feed = WATCHDOG_FEED_BYTE;
> *wdt_control = timerValue;
> }
>
> /********************** Declaration **********************/
> #ifndef WATCHDOGCONTROL_H_
> #define WATCHDOGCONTROL_H_
>
> //Classs Include Files
> #include<unistd.h>
> #include<sys/types.h>
> #include<sys/mman.h>
> #include<fcntl.h>
> #include<assert.h>
> #include <pthread.h>
>
> //Class Definitions
> #define WATCHDOG_FEED_BYTE 0x05
>
> //Class Declaration
> class WatchdogControl
> {
> public:
> //Public Class Variables
>
> //Public Class Functions
> WatchdogControl();
> virtual ~WatchdogControl();
> void startWatchdogMonitor();
>
>
> private:
> //Private Class Variables
> volatile unsigned char *wdt_control;
> volatile unsigned char *wdt_feed;
> int timerValue;
> bool WatchdogTimerOn;
>
> //Private Class Functions
> void* resetWatchdog(void* nothing);
> void setWatchdogTimer();
>
> };
>
> #endif /*WATCHDOGCONTROL_H_*/
>
> /********************** Error **********************/
> Severity and Description Path Resource Location Creation Time Id
> error: cannot convert 'void* (WatchdogControl::*)(void*)' to 'void*
> (*)(void*)' for argument '3' to 'int pthread_create(pthread_t*, const
> pthread_attr_t*, void* (*)(void*), void*)' rbash/WatchdogControl
> WatchdogControl.cpp line 16 1200986943638 391
>
>
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|