hello friends i have written the code for ARM RTOS, i have used same priority for all of my 4 task, its working fine
my problem is when i change the priority in the code then all task's are not executing simultaneously.... please any one help
Have you given the code a reason to run?
Does the high-prio tasks share time?
Do you have any round-robin activated?
What code?
What RTOS?
here is my code
#include<lpc214x.h> #include"adc.h" #include"buzzer.h" #include"spi.h" /* Include type and function declarations for RTX */
#include <RTX_Config.h> #include <RTL.h> /* RTX kernel functions & defines */
OS_TID tsk1; /* assigne identification for task 1 */ OS_TID tsk2; /* assigne identification for task 2 */ OS_TID tsk3; /* assigne identification for task 3 */ OS_TID tsk4; /* assigne identification for task 4 */
short counter1; /* counter for task 1 */ short counter2; /* counter for task 2 */ short counter3; /* counter for task 3 */ short counter4; /* counter for task 4 */
void job1 (void) __task; void job2 (void) __task; void job3 (void) __task; void job4 (void) __task;
/*---------------------------------------------------------------------------- * Task 1: RTX Kernel starts this task with os_sys_init (job1) *---------------------------------------------------------------------------*/ void job1 (void) __task { os_tsk_prio_self (2); /* higher priority to preempt job3 */ tsk1 = os_tsk_self (); /* get own task identification number */ tsk2 = os_tsk_create (job2,2); /* start task 2 */ tsk3 = os_tsk_create (job3,3); /* start task 3 */ tsk4 = os_tsk_create (job4,3); /* start task 4 */
//while (1) /* endless loop */ { buzzer(); counter1++; /* increment counter 1 */ os_dly_wait (5); /* wait for timeout: 5 ticks */ } }
/*---------------------------------------------------------------------------- * Task 2 'job2': RTX Kernel starts this task with os_tsk_create (job2,2) *---------------------------------------------------------------------------*/ void job2 (void) __task /* higher priority to preempt job3 */ { // while (1) /* endless loop */ { ADC(); counter2++; /* increment counter 2 */ os_dly_wait (10); /* wait for timeout: 10 ticks */ } }
/*---------------------------------------------------------------------------- * Task 3 'job3': RTX Kernel starts this task with os_tsk_create (job3,1) *---------------------------------------------------------------------------*/ void job3 (void) __task { // while (1) /* endless loop */ { SPI(); //counter3++; /* increment counter 3 */ //if (counter3 == 0) /* signal overflow of counter 3 */ //{ // os_evt_set (0x00ff,tsk4); /* to task 4 */ //os_tsk_pass (); //} } }
/*---------------------------------------------------------------------------- * Task 4 'job4': RTX Kernel starts this task with os_tsk_create (job4,1) *---------------------------------------------------------------------------*/ void job4 (void) __task { while (1) /* endless loop */ { //SCI(); //os_evt_wait_or (0x0001, 0xffff); /* wait for signal event */ //counter4++; /* process overflow from counter 3 */ } }
/*---------------------------------------------------------------------------- * Main: Initialize and start RTX Kernel *---------------------------------------------------------------------------*/ int main (void) { /* program execution starts here */ os_sys_init (job1); /* initialize and start task 1 */ }
/*---------------------------------------------------------------------------- * end of file *---------------------------------------------------------------------------*/
And how do you expect anyone to be able to read that, when you didn't read the information on how to post source code?
Repost the source code, but make sure it is properly tagged as code.
here is my updated working code, if i change the priority this code will not do all of the task can any one help for assigning other priority for this code to work for all task
void job1 (void) __task {
os_tsk_prio_self (2); tsk1 = os_tsk_self (); tsk2 = os_tsk_create (job2,2); tsk3 = os_tsk_create (job3,3); tsk4 = os_tsk_create (job4,3); buzzer(); counter1++; os_dly_wait (5); }
void job2 (void) __task {
ADC(); counter2++; os_dly_wait (10); }
void job3 (void) __task {
SPI(); }
void job4 (void) __task {
SCI(); }
int main (void) {
os_sys_init (job1); }
i am using LPC2148 ARM processor, it has RTX Kernel OS in it. and i had posted the code in the above, please tel me which priority can i select to make that code to work for all task
OK, so you've found how to use the tags for Bold - wasn't so hard, was it?
So how about now posting your source code using the correct tags for source code?
If your "buzzer()" function returns, your program is falling of a cliff! Did you read RTX's user manual?
__task void job1(vod) { buzzer() ; for (;;) // Do you have an infinite loop in your tasks? { } }
The same applies to other tasks as well.
i dont have any infinite loop in my task now
Then you MUST start by reading RTX's user manual - you cannot go on like this! Start here:
http://www.keil.com/support/man/docs/rlarm/rlarm_ar_artxarm.htm
So you posted a version of the code with all comments and declarations stripped.
But more importantly - you posted code that didn't show a single task loop.
Didn't you read my original comment? Let me repeat it: "Does the high-prio tasks share time?"
A high-prio task that wants to consume 100% CPU time will consume 100% CPU time unless you have a task with even higher priority that wants to be serviced, or you have interrupts that needs servicing.
i had used in the beginning , even though i am facing same problem
if i keep infinite loop also , program is not executing according to the priority wise
it means that you are saying me to use lower priority for the job1 and litle higher priority for the job2 and so on?
Maybe. But he's also saying that you should start by reading the user manual first. You cannot expect your program to function according to your expectations if it contains fundamental errors! At this moment there is little point in asking more questions; fix the glaring errors, come back when it is up and running.
Programs - whether RTOS or not - neither know nor care anything of your expectations.
Programs function according to the specifications given in the relevant Documentation.
It is up to you to study the Documentation, and base your expectations on what you find there.