Hi Petersen,

 We have one question regarding when we switched from
cpu_switch_context_exit--> main_trampoline---->sched_task_exit
-->cpu_switch_context_exit-->idle_thread-->sched_task_exit (this never
execute) Is this understanding is correct?

my question is what will happen next and what need tobe done???

Thanks
Shishir Tiwari

On Thu, Jan 15, 2015 at 9:00 PM, Hauke Petersen
<hauke.peter...@fu-berlin.de> wrote:
> Hi Shishir,
>
> the scheduler is deciding which task is run next. During normal operation,
> the behavior is intended as this:
>
> - save the current context (register contents to the current stacks thread)
> - run scheduler to determine the thread with the highest priority
> - point a global variable (sched_active_thread) to the chosen thread's
> control block
> - restore the context using the stack pointer from the active thread
> (pointed to by sched_active_thread)
>
> During system start-up (or after a thread terminates), this behavior is
> slightly different, as the context save is omitted.
>
> Now finding the task_func is a question of initializing the stack correctly.
> If you know your context-restore sequence, you have to put initial register
> values onto your threads stack (done in thread_arch_stack_init()). The value
> of the task_func pointer is pointing the the first instruction the thread
> should execute. For this you have to load the value of the task_func pointer
> into the MCUs program counter on context restore. How this is done heavily
> depends on your MCU architecture - maybe this becomes clearer if you look a
> the ARM Cortex implementations?!
>
> Does this answer your question?
>
> Cheers,
> Hauke
>
>
> On 15.01.2015 16:03, shishir tiwari wrote:
>>
>> Hi Petersen,
>>
>> we are still facing issue for thread not working . we want to know how
>> the task get schedule and how it find the task_func entry point and
>> also how is switching happen.
>>
>> please help on this.
>>
>> Thanks
>> Shishir
>>
>>
>> On Wed, Jan 14, 2015 at 3:44 PM, Joakim Gebart <joakim.geb...@eistec.se>
>> wrote:
>>>
>>> You can look at the startup files for other CPUs for a proper way of
>>> doing
>>> initialization e.g. cpu/stm32f1/startup.c
>>> Note that you must also make sure that your linker script provides the
>>> correct symbols at the beginning and end of .data and .bss.
>>>
>>> Best regards,
>>>
>>> Joakim Gebart
>>> Eistec AB
>>> www.eistec.se
>>>
>>> On 01/13/2015 10:45 PM, Ryan Kurte wrote:
>>>
>>> Hi Shishir,
>>>
>>> I seem to recall having the same issue when starting the EFM32 port.
>>> The issue in my case was that without the startup files, the .bss section
>>> was not getting cleared.
>>> When the threads came to launch, the value in one of the kernel functions
>>> was not correct. Which is pretty easy to check with a debugger.
>>>
>>> The fix was to clear the .bss section in the _init routine, my
>>> implementation (using symbols from the linker) is:
>>>
>>>      //Clear bss
>>>      for (uint32_t i = (uint32_t)&__bss_start__; i <
>>> (uint32_t)&__bss_end__;
>>> i++) {
>>>          addr = (int*)i;
>>>          *addr = (int)NULL;
>>>      }
>>>
>>> I am not sure this is the /correct/ way to do it, but the .bss definitely
>>> needs to be initialised to zeros.
>>>
>>> Hope that helps,
>>>
>>> Ryan
>>>
>>> On 14 January 2015 at 07:56, Hauke Petersen <hauke.peter...@fu-berlin.de>
>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> On 13.01.2015 19:04, shishir tiwari wrote:
>>>>>
>>>>> Hi petersen,
>>>>>
>>>>>    Thanks for your information.
>>>>>
>>>>> we are trying to put your method but still is it not working. we are
>>>>> studying and doing some experiments.
>>>>>
>>>>> one more question : In hwtimer_init()--> hwtimer_arch_init() this need
>>>>> to be implemented in harsware is compulsory?? for scheduling to work?
>>>>
>>>> nope, the timer is generally not needed for scheduling.
>>>>
>>>> Cheers,
>>>> Hauke
>>>>
>>>>
>>>>
>>>>>
>>>>> thanks
>>>>> shishir tiwari
>>>>>
>>>>> On Mon, Jan 12, 2015 at 10:01 PM, Hauke Petersen
>>>>> <hauke.peter...@fu-berlin.de> wrote:
>>>>>>
>>>>>> Hi Shishir,
>>>>>>
>>>>>> when RIOT initially starts up, the CPU is normally running in
>>>>>> interrupt
>>>>>> mode
>>>>>> (using the interrupt mode stack). After creating the stacks for the
>>>>>> main
>>>>>> and
>>>>>> the idle threads, the CPU must be put into thread-mode. This means the
>>>>>> main
>>>>>> threads initial context needs to put into the CPUs registers and the
>>>>>> stack
>>>>>> pointer must put to the main-threads stack. After this is done the CPU
>>>>>> can
>>>>>> just do 'normal' task switching for switching between threads.
>>>>>>
>>>>>> So to put it short: in cpu_switch_context_exit() you simply must load
>>>>>> the
>>>>>> main threads context into the CPUs register and point the stack
>>>>>> pointer
>>>>>> to
>>>>>> the main threads stack.
>>>>>>
>>>>>> Let me know if you need further information!
>>>>>>
>>>>>> Cheers,
>>>>>> Hauke
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 12.01.2015 15:35, shishir tiwari wrote:
>>>>>>>
>>>>>>> Hey Everyone,
>>>>>>>
>>>>>>> I have been porting RIOT OS to new processor(ARC) and i had compilied
>>>>>>> hello world program successfully.
>>>>>>> When i debug the helloworld.elf in kernel_init function the
>>>>>>> thread_create() function has execute successfully.But the thread
>>>>>>> "idle_thread" "and main_trampoline" function is not been called. why?
>>>>>>>
>>>>>>> What is thing need to be done on this cpu_switch_context_exit()
>>>>>>> function. please explain me.
>>>>>>>
>>>>>>>
>>>>>>> Thanks
>>>>>>> Shishir Tiwari
>>>>>>> _______________________________________________
>>>>>>> devel mailing list
>>>>>>> devel@riot-os.org
>>>>>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> devel mailing list
>>>>>> devel@riot-os.org
>>>>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>>>
>>>>> _______________________________________________
>>>>> devel mailing list
>>>>> devel@riot-os.org
>>>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>>
>>>>
>>>> _______________________________________________
>>>> devel mailing list
>>>> devel@riot-os.org
>>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> devel mailing list
>>> devel@riot-os.org
>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>
>>>
>>>
>>> _______________________________________________
>>> devel mailing list
>>> devel@riot-os.org
>>> http://lists.riot-os.org/mailman/listinfo/devel
>>>
>> _______________________________________________
>> devel mailing list
>> devel@riot-os.org
>> http://lists.riot-os.org/mailman/listinfo/devel
>
>
> _______________________________________________
> devel mailing list
> devel@riot-os.org
> http://lists.riot-os.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@riot-os.org
http://lists.riot-os.org/mailman/listinfo/devel

Reply via email to