|
|
/*------------------------------------------------------------------------------
|
|
|
-- This file is a part of the libuc, microcontroler library
|
|
|
-- Copyright (C) 2013, Alexis Jeandet
|
|
|
--
|
|
|
-- This program is free software; you can redistribute it and/or modify
|
|
|
-- it under the terms of the GNU General Public License as published by
|
|
|
-- the Free Software Foundation; either version 3 of the License, or
|
|
|
-- (at your option) any later version.
|
|
|
--
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
-- GNU General Public License for more details.
|
|
|
--
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
|
-- along with this program; if not, write to the Free Software
|
|
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
-------------------------------------------------------------------------------
|
|
|
-- Author : Alexis Jeandet
|
|
|
-- Mail : alexis.jeandet@member.fsf.org
|
|
|
-------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
#define __THREAD_PRIVATE__
|
|
|
#include <thread.h>
|
|
|
#include <stdio.h>
|
|
|
/*
|
|
|
For CM4 cf lazy Stacking and context switching form ARM
|
|
|
List of automatically saved registers:
|
|
|
R0
|
|
|
R1
|
|
|
R2
|
|
|
R3
|
|
|
R4
|
|
|
R5
|
|
|
R6
|
|
|
R7
|
|
|
R8
|
|
|
R9
|
|
|
R10
|
|
|
R11
|
|
|
R12
|
|
|
R13(SP)
|
|
|
R14(LR)
|
|
|
R15(PC)
|
|
|
xPSR
|
|
|
S0 to S15 (if enabled)
|
|
|
|
|
|
List of registers to save:
|
|
|
S16 to S31
|
|
|
*/
|
|
|
|
|
|
#ifndef __mainThreadStackSize__
|
|
|
#define __mainThreadStackSize__ (8*1024)
|
|
|
#endif
|
|
|
|
|
|
char __mainThreadStack__[__mainThreadStackSize__]__attribute__ ((aligned (4)));
|
|
|
thread_t mainThread;
|
|
|
|
|
|
|
|
|
void __cpusavecontext(void* dataspace)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
void __cpurestorecontext(void* dataspace)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
void __initThreading()
|
|
|
{
|
|
|
extern int libuc_main();
|
|
|
thread_t mainThread;
|
|
|
mainThread.func=libuc_main;
|
|
|
mainThread.next=NULL;
|
|
|
mainThread.prev=NULL;
|
|
|
mainThread.priority=0;
|
|
|
mainThread.__stack__=(void*)__mainThreadStack__;
|
|
|
mainThread.stackSize=__mainThreadStackSize__;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|