| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| skoberlink 
 
 
 Joined: 27 May 2010
 Posts: 52
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Jul 21, 2010 9:20 am |   |  
				| 
 |  
				| So thanks again for helping me get it working.  I've been playing with it and came across an issue.  It's not a problem just something I'm curious about. 
 I have a task that I would like defined in another object file.  This causes an error.  Do task have to be defined in the main file?  If not, how can I define them somewhere else?
 
 Like I said not a big issue, just keeps my code neater in my opnion.
 |  | 
	
		|  | 
	
		| tester 
 
 
 Joined: 29 Jun 2009
 Posts: 40
 Location: Russia, SPb
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Wed Aug 04, 2010 7:41 am |   |  
				| 
 |  
				|  	  | skoberlink wrote: |  	  | I have a task that I would like defined in another object file.  This causes an error.  Do task have to be defined in the main file?  If not, how can I define them somewhere else? | 
 Yes, the task should be defined in main():
 
  	  | Code: |  	  | void MyTask (void); // prototype
 
 void main (void)
 {
 ...
 OS_Task_Define( MyTask);
 OS_Task_Create(0, MyTask);
 ...
 OS_Run();
 }
 
 | 
 
 P.S. Don't forget, that CCS does not link object files correctly.
 |  | 
	
		|  | 
	
		| skoberlink 
 
 
 Joined: 27 May 2010
 Posts: 52
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Mon Aug 09, 2010 9:59 am |   |  
				| 
 |  
				| I'm having another problem that I don't quite understand. At this point i've run several simple test programs without any problems using OSA. I'm using OSA in a program now and the tasks are never entered. I tracked it down to that the OS_State.bEnable variable was never enabled. This seemed to get reset during the call to _OS_SET_STATE(); I'm not sure why this would be. Any suggestions? 
 
  	  | Code: |  	  | #define OS_Sched()                                                               \ {                                                                            \
 _OS_temp = 0;                                                            \
 \
 IF_NOT_IS_IN_CRITICAL_SECTION()                                          \
 {                                                                        \
 if (_OS_CurTask >= (OST_TASK_POINTER)OS_TaskVars + (OS_TASKS-1))     \
 _OS_CurTask = (OST_TASK_POINTER)OS_TaskVars;                     \
 else                                                                 \
 _OS_CurTask++;                                                   \
 }                                                                        \
 \
 _OS_SET_STATE();                                                         \ //This resets the bEnable bit
 \
 /* Skip empty descriptor              */                                 \
 if (!_OS_bTaskEnable || _OS_bTaskPaused) goto _LABEL_SCHED_CONTINUE;     \ //bEnable has been reset here so it doesn't enter the task, it just skips to the next loop
 \
 IF_NOT_OS_CHECK_DELAYS_GOTO_SCHED_CONTINUE;                              \
 \
 _OS_JumpToTask();                                                        \
 _OS_SaveRetAddr();                                                       \
 \
 _LABEL_SCHED_CONTINUE:;                                                      \
 }
 | 
 |  | 
	
		|  | 
	
		| tester 
 
 
 Joined: 29 Jun 2009
 Posts: 40
 Location: Russia, SPb
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Tue Aug 10, 2010 9:30 am |   |  
				| 
 |  
				|  	  | skoberlink wrote: |  	  | I'm having another problem that I don't quite understand. | 
 Does the bEnable flag become set after OS_Task_Create?
 Do you use OS_Task_Stop or OS_Task_Delete services?
 Is OS_TASKS set properly?
 |  | 
	
		|  | 
	
		| skoberlink 
 
 
 Joined: 27 May 2010
 Posts: 52
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Tue Aug 10, 2010 9:36 am |   |  
				| 
 |  
				|  	  | tester wrote: |  	  |  	  | skoberlink wrote: |  	  | I'm having another problem that I don't quite understand. | 
 Does the bEnable flag become set after OS_Task_Create?
 Do you use OS_Task_Stop or OS_Task_Delete services?
 Is OS_TASKS set properly?
 | 
 
 The bEnable flag is set in both OS_state and OS_CurTask after the call to OS_Task_Create(). It is reset in OS_state but not in OS_CurTask after the call to OS_SET_STATE.
 
 I do not use OS_Task_Stop or OS_Task_Delete
 
 OS_TASKS is set to 1 currently as I am converting code over one task at a time. There is only 1 task being created and run.
 |  | 
	
		|  | 
	
		| tester 
 
 
 Joined: 29 Jun 2009
 Posts: 40
 Location: Russia, SPb
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Tue Aug 10, 2010 9:51 am |   |  
				| 
 |  
				|  	  | skoberlink wrote: |  	  | The bEnable flag is set in both OS_state and OS_CurTask after the call to OS_Task_Create(). It is reset in OS_state but not in OS_CurTask after the call to OS_SET_STATE. 
 I do not use OS_Task_Stop or OS_Task_Delete
 
 OS_TASKS is set to 1 currently as I am converting code over one task at a time. There is only 1 task being created and run.
 | 
 Can you send me your project? (e-mail: osa at pic24.ru)
 |  | 
	
		|  | 
	
		| chargedneuron 
 
 
 Joined: 05 May 2007
 Posts: 6
 Location: Springfield, Oregon, USA
 
 
			        
 
 | 
			
				|  |  
				|  Posted: Thu Apr 14, 2011 11:34 am |   |  
				| 
 |  
				| I was attempting to give this RTOS a try but I get the following error when I compile their tutorial #1; 
 Improper use of a function identifier
 
 
  	  | Code: |  	  | *** Error 117 "tutor1.c" Line 178(31,32): Improper use of a function identifier *** Error 117 "tutor1.c" Line 179(31,32): Improper use of a function identifier
 | 
 
 I am using compiler 4.096.
 
 The command on that line is;
 
 
  	  | Code: |  	  | OS_Task_Create(0, Task_T1); // Tell to OS that Task_T1 and Task_T2 will OS_Task_Create(1, Task_T2); // be called by scheduler
 | 
 
 the origin of that command is in OSA_Pic18_CCS.h as;
 
 
  	  | Code: |  	  | /************************************************************************/ /*                                                                      */
 /* Create task                                                          */
 /*                                                                      */
 /************************************************************************/
 
 #define OS_Task_Create(priority, TaskName)                          \
 {                                                               \
 _OS_Task_Create(priority, (OST_CODE_POINTER)TaskName);      \
 }
 
 #define OS_Task_Create_M(priority, TaskName)                        \
 {                                                               \
 OS_Task_Reserve(TaskName);                                  \
 _OS_Task_Create(priority, (OST_CODE_POINTER)TaskName);      \
 }
 | 
 
 Any suggestions as to how to correct this? My thanks in advance.
 _________________
 "Trouble? I call it sport!" - Hyde - The League of Extraordinary Gentlemen
 
 
  |  | 
	
		|  | 
	
		| chargedneuron 
 
 
 Joined: 05 May 2007
 Posts: 6
 Location: Springfield, Oregon, USA
 
 
			        
 
 | 
			
				|  |  
				|  Posted: Thu Mar 22, 2012 1:25 am |   |  
				| 
 |  
				| After working with one of the designers. it turns out that the PIC18 Specific header required a fix. _________________
 "Trouble? I call it sport!" - Hyde - The League of Extraordinary Gentlemen
 
 
  |  | 
	
		|  | 
	
		| Bill24 
 
 
 Joined: 30 Jun 2012
 Posts: 45
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Sep 07, 2012 7:13 am |   |  
				| 
 |  
				| I am testing OSA version3 using a PIC18F46K80 and CCS compiler version 4.135 
 The example worked with very little fuss. I had to change to location of OSA.h to get it to run.
 
 Looking through the code, to define a task eg
 
  	  | Code: |  	  | OS_Task_Reserve(Task_Rolling);       // Define tasks
 
 | 
 Some code is called as follows:
 
  	  | Code: |  	  | /******************************************/
 /*                                                                      */
 /* Create task by indirect address                       */
 /*                                                                      */
 /******************************************/
 
 #define OS_Task_Reserve(TaskName)                    \
 if (_pcl & 1) TaskName();
 
 | 
 Could someone please tell me what this does and how it works.
 I am intrigued.
 |  | 
	
		|  | 
	
		| future 
 
 
 Joined: 14 May 2004
 Posts: 330
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Sun Sep 23, 2012 8:03 am |   |  
				| 
 |  
				| It tells the compiler to not remove the function otherwise it will not get into the final code. |  | 
	
		|  | 
	
		|  |