|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
||||
|
||||
|
Interrupt timer, executing code asap?
Thanks for Innovation First for that good white paper on timers, without that I'd be lost.
![]() Well I got the interrupt timer working, looks good. So I wrote this function to use the loop code. Here is the code: Code:
void example(unsigned int seconds, char startEnd)
{
static char runOnce1 = 0, runOnce2 = 0;
if(startEnd == 1 && runOnce1 == 0)
{
int snapSecondCnt = secondCnt; //Take a snapshot of the seconds
runOnce = 1; //Make sure it doesn't run again
//Run any command to start here
}
else if(startEnd == 0 && runOnce2 == 0)
{
if(secondCnt == (snapSecondCnt + seconds))
{
snapSecondCnt = 0;
runOnce2 = 1;
//Run any other stopping command here
}
}
else
{
printf("example() error!\n");
}
}
void Process_Data_From_Local_IO(void)
{
/* Add code here that you want to be executed every program loop. */
if (updateDisplay)
{
INTCONbits.GIEL = 0; /* Disable Low Priority Interrupts */
updateDisplay = 0;
INTCONbits.GIEL = 1; /* Enable Low Priority Interrupts */
rc_dig_out04 ^= 1; /* Pin4 toggles every 1s */
secondCount++;
example(10,1); //Start - My edit!
example(10,0); //End - My edit!
printf("Pin 4 = %d, Elapsed Time (s) = %d\n",(int)rc_dig_out04,secondCount);
}
}
My question: does this approach even work in practice? I know that you have to be zip zip in and out of interrupts, but in the whitepaper it says that the interrupt od is the most effective timer. So does my example() start and end always take less than one second? Have I approached this totally wrong? Any tips? I wouldn't recommend anyone to take this code for their own, it most likely doesn't work. ![]() |
|
#2
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
Was I meandering in my meaning? I apologize, sometimes I do that.
My question is purely that if a function is executed, does everything else stop while that is exected? |
|
#3
|
|||
|
|||
|
Re: Interrupt timer, executing code asap?
Quote:
Yes, only one thing can be happening at a time. When an interrupt occurs, whatever is currently happening stops, and the data being used gets set aside (onto the stack actually) Then the interrupt handler runs, and handles the interrupt (obviously). Then whatever code was running before resumes where it left off, without any real knowledge of the interruption. Let me know if this doesn't answer you question. |
|
#4
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
So my example(), if it took 5 seconds (start and end each), then the timer itself would be off by 10 seconds? Well I need a fork().
![]() |
|
#5
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
technically, even fork() only does one thing at a time
it just interlaces the needs of multiple things, so that part of one function executes, then part of the next, et cetera.solution? no function in your bot code should last 5 seconds ![]() |
|
#6
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
Quote:
![]() |
|
#7
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
that too
heck, no individual function should last anywhere near 26ms ![]() |
|
#8
|
|||||
|
|||||
|
Re: Interrupt timer, executing code asap?
except sine
![]() ![]() ![]() Well, if you forgot the lookup table! |
|
#9
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
wouldn't be that useful a sine function if it took near 26ms - remember, you have do do something with it too
![]() |
|
#10
|
|||
|
|||
|
Re: Interrupt timer, executing code asap?
Real time programming requires the use of a "state machine", which is a programming technique where one state starts the motors, for example, and the second state monitors for a certain amount of time to pass before proceeding to the third state.
The second state can be entered multiple times without causing any problems. So the second state checks the time, then reutrns to the code where the data packets can be handled. Then the same fuction is called to execute the seconds state which looks at the time again. State machines are best implemented using the C "switch" statement, and some long hard thinking. |
|
#11
|
||||
|
||||
|
Re: Interrupt timer, executing code asap?
Quote:
-Kevin |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Inserting Naviagation code into Default code? | actorindp | Programming | 3 | 28-01-2004 18:12 |
| Interrupts Questions | mightywombat | Programming | 0 | 03-01-2004 14:50 |
| EDU Demo Code: Serial Data Transmitter Using a State-Machine | Kevin Watson | Programming | 3 | 28-12-2003 22:56 |
| EDU Interrupt and Timer Template Code | Kevin Watson | Programming | 8 | 22-12-2003 14:11 |
| EDU Demo Code: Real-Time Clock Using a Timer | Kevin Watson | Programming | 1 | 17-12-2003 15:14 |