diff options
Diffstat (limited to 'software/mpu')
-rw-r--r-- | software/mpu/MurSatMPU Debug.launch | 19 | ||||
-rw-r--r-- | software/mpu/MurSatMPU Release.launch | 17 | ||||
-rw-r--r-- | software/mpu/inc/Types.h | 14 | ||||
-rw-r--r-- | software/mpu/src/boot.c | 57 | ||||
-rw-r--r-- | software/mpu/src/kernel.c | 67 | ||||
-rw-r--r-- | software/mpu/src/main.c | 5 |
6 files changed, 131 insertions, 48 deletions
diff --git a/software/mpu/MurSatMPU Debug.launch b/software/mpu/MurSatMPU Debug.launch index 1bbeecc..8f240df 100644 --- a/software/mpu/MurSatMPU Debug.launch +++ b/software/mpu/MurSatMPU Debug.launch @@ -1,17 +1,32 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.crt.ctrlcenter.idleNative2">
-<stringAttribute key="com.crt.ctrlcenter.targetbase" value="NXP LPC1300"/>
+<stringAttribute key=".gdbinit" value=""/>
+<stringAttribute key="com.crt.ctrlcenter.targetbase" value="NXP LPC1300 (*)"/>
<stringAttribute key="com.crt.ctrlcenter.targetconfig" value="<?xml version="1.0" encoding="UTF-8"?> <config chipvendor="NXP" genname="NXP LPC1300" id="config.gdb.stub"><parameters><params><param description="Enter as XTAL[,PLL]. PLL is optional. Values are in kHz" name="Crystal (XTAL) frequency and PLL value" required="false" type="nullString" var="xtal.hz"/> </params> <initValue value="false" var="vector.catch"/> <params><param default="true" description="Vector catch" name="Vector catch" value="false" var="vector.catch"><enum value="True"/> <enum value="False"/> </param> </params> <params><param default="true" description="Enable Red Trace" name="Enable Red Trace " value="true" var="swv.enable"><enum value="true"/> <enum value="false"/> </param> </params> <params><param default="Auto" description="Enablement of semihosting support" name="Semihosting support" value="Auto" var="internal.semihost"><enum value="On"/> <enum value="Off"/> <enum value="Auto"/> </param> </params> <params><param default="" description="Switch debug interface between SWD and JTAG (leave blank for default [SWD])" name="Debug interface" option="" value="" var="internal.debug.interface"><enum value=""/> <enum value="JTAG"/> <enum value="SWD"/> </param> </params> <params><param default="" description="Maximum wire speed in KHz (leave blank to Auto-detect). Not all values are supported by all targets" name="Maximum wire speed" type="nullString" value="" var="emu.speed"><enum value=""/> <enum value="30000"/> <enum value="15000"/> <enum value="10000"/> <enum value="7500"/> <enum value="6000"/> <enum value="5000"/> <enum value="3750"/> <enum value="3000"/> <enum value="2500"/> <enum value="2000"/> <enum value="1500"/> <enum value="1250"/> <enum value="1200"/> <enum value="1000"/> <enum value="750"/> <enum value="600"/> <enum value="500"/> <enum value="400"/> <enum value="300"/> <enum value="250"/> <enum value="200"/> <enum value="150"/> </param> </params> <params><param default="" description="Additional options" name="Additional options" value="" var="misc.options"/> <param default="2" description="Set stub debug level (1-4)" name="Debug Level " value="2" var="debug.level"/> <param default="True" description="when True, executable image will be loaded into the target" name="Load image" type="boolean" value="True" var="load"><enum value="True"/> <enum value="False"/> </param> <param default="cont" description="Run, continue or (do nothing)" name="Run/Continue image" value="cont" var="run"><enum value="run"/> <enum value="cont"/> <enum value=""/> </param> <param default="off" description="If on is specified, make the debugger treat unknown memory as non-existent and refuse \naccesses to such memory. If off is specified, treat the memory as RAM" name="Memory Access Checking" value="off" var="mem.access"><enum value="on"/> <enum value="off"/> </param> <param default="cont" description="choose the disconnect behavior for the target" name="Disconnect behavior" value="cont" var="ondisconnect"><enum value="nochange"/> <enum value="stop"/> <enum value="cont"/> <enum value="run_cont"/> </param> </params> </parameters> <script emulators="${gdb.stub} -mi -info-emu" silent="false" swv="true" type="init">set remotetimeout 60000&#x0A;target extended-remote | ${gdb.stub} -g -mi -${debug.level:2} ${-c+speed:$null} ${-s+emu.speed:$null} ${-p+package:$null} ${-e+emulator:$null} ${vector.catch?-vc:} ${misc.options}&#x0A;set mem inaccessible-by-default ${mem.access}&#x0A;mon ondisconnect ${ondisconnect}&#x0A;set arm force-mode thumb&#x0A;${load}</script> <script silent="false" type="run">${run}</script> </config> "/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="arm-none-eabi-gdb"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.breakpointsFullPath" value="false"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="com.crt.ctrlcenter.cmdfactory"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="com.crt.ctrlcenter.CRTEmbeddedCDebugger"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="u-prvLoopBackTestTask-(format)" val="1"/></contentList>"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="pData-Msg-kernel_Process_Task-(cast)" val="char*"/><content id="*pxQueue_Kernel-pxQueue_Kernel-boot_CreateQueues-(cast_to_array)" val="0:1"/><content id="u-prvLoopBackTestTask-(format)" val="1"/></contentList>"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug\MurSatMPU.axf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="MurSatMPU"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.crt.advproject.config.exe.debug.1738945474"/>
<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="false"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/MurSatMPU"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
</launchConfiguration>
diff --git a/software/mpu/MurSatMPU Release.launch b/software/mpu/MurSatMPU Release.launch index f7927bc..8183be3 100644 --- a/software/mpu/MurSatMPU Release.launch +++ b/software/mpu/MurSatMPU Release.launch @@ -1,13 +1,28 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.crt.ctrlcenter.idleNative2">
-<stringAttribute key="com.crt.ctrlcenter.targetbase" value="NXP LPC1300"/>
+<stringAttribute key=".gdbinit" value=""/>
+<stringAttribute key="com.crt.ctrlcenter.targetbase" value="NXP LPC1300 (*)"/>
<stringAttribute key="com.crt.ctrlcenter.targetconfig" value="<?xml version="1.0" encoding="UTF-8"?> <config chipvendor="NXP" genname="NXP LPC1300" id="config.gdb.stub"><parameters><params><param description="Enter as XTAL[,PLL]. PLL is optional. Values are in kHz" name="Crystal (XTAL) frequency and PLL value" required="false" type="nullString" var="xtal.hz"/> </params> <initValue value="false" var="vector.catch"/> <params><param default="true" description="Vector catch" name="Vector catch" value="false" var="vector.catch"><enum value="True"/> <enum value="False"/> </param> </params> <params><param default="true" description="Enable Red Trace" name="Enable Red Trace " value="true" var="swv.enable"><enum value="true"/> <enum value="false"/> </param> </params> <params><param default="Auto" description="Enablement of semihosting support" name="Semihosting support" value="Auto" var="internal.semihost"><enum value="On"/> <enum value="Off"/> <enum value="Auto"/> </param> </params> <params><param default="" description="Switch debug interface between SWD and JTAG (leave blank for default [SWD])" name="Debug interface" option="" value="" var="internal.debug.interface"><enum value=""/> <enum value="JTAG"/> <enum value="SWD"/> </param> </params> <params><param default="" description="Maximum wire speed in KHz (leave blank to Auto-detect). Not all values are supported by all targets" name="Maximum wire speed" type="nullString" value="" var="emu.speed"><enum value=""/> <enum value="30000"/> <enum value="15000"/> <enum value="10000"/> <enum value="7500"/> <enum value="6000"/> <enum value="5000"/> <enum value="3750"/> <enum value="3000"/> <enum value="2500"/> <enum value="2000"/> <enum value="1500"/> <enum value="1250"/> <enum value="1200"/> <enum value="1000"/> <enum value="750"/> <enum value="600"/> <enum value="500"/> <enum value="400"/> <enum value="300"/> <enum value="250"/> <enum value="200"/> <enum value="150"/> </param> </params> <params><param default="" description="Additional options" name="Additional options" value="" var="misc.options"/> <param default="2" description="Set stub debug level (1-4)" name="Debug Level " value="2" var="debug.level"/> <param default="True" description="when True, executable image will be loaded into the target" name="Load image" type="boolean" value="True" var="load"><enum value="True"/> <enum value="False"/> </param> <param default="cont" description="Run, continue or (do nothing)" name="Run/Continue image" value="cont" var="run"><enum value="run"/> <enum value="cont"/> <enum value=""/> </param> <param default="off" description="If on is specified, make the debugger treat unknown memory as non-existent and refuse \naccesses to such memory. If off is specified, treat the memory as RAM" name="Memory Access Checking" value="off" var="mem.access"><enum value="on"/> <enum value="off"/> </param> <param default="cont" description="choose the disconnect behavior for the target" name="Disconnect behavior" value="cont" var="ondisconnect"><enum value="nochange"/> <enum value="stop"/> <enum value="cont"/> <enum value="run_cont"/> </param> </params> </parameters> <script emulators="${gdb.stub} -mi -info-emu" silent="false" swv="true" type="init">set remotetimeout 60000&#x0A;target extended-remote | ${gdb.stub} -g -mi -${debug.level:2} ${-c+speed:$null} ${-s+emu.speed:$null} ${-p+package:$null} ${-e+emulator:$null} ${vector.catch?-vc:} ${misc.options}&#x0A;set mem inaccessible-by-default ${mem.access}&#x0A;mon ondisconnect ${ondisconnect}&#x0A;set arm force-mode thumb&#x0A;${load}</script> <script silent="false" type="run">${run}</script> </config> "/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="arm-none-eabi-gdb"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.breakpointsFullPath" value="false"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="com.crt.ctrlcenter.cmdfactory"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="com.crt.ctrlcenter.CRTEmbeddedCDebugger"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Release\MurSatMPU.axf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="MurSatMPU"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.crt.advproject.config.exe.release.1384247445"/>
<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="false"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/MurSatMPU"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
</launchConfiguration>
diff --git a/software/mpu/inc/Types.h b/software/mpu/inc/Types.h index 501d359..1ceeaad 100644 --- a/software/mpu/inc/Types.h +++ b/software/mpu/inc/Types.h @@ -2,6 +2,8 @@ #include "task.h"
#include "queue.h"
+#define MS(ms) portTICK_RATE_MS * (ms)
+
typedef enum
{
STATUS_OK = 0x0U,
@@ -27,7 +29,13 @@ typedef struct typedef struct
{
- xTaskHandle *pxTask_Lightsens;
- xQueueHandle *pxQueue;
-}Task_Param_t;
+ xQueueHandle hxq_Kernel;
+ xQueueHandle hxq_Camera;
+ xQueueHandle hxq_LightSens;
+}QH_t;
+typedef struct
+{
+ xTaskHandle hxTask_Self;
+ QH_t QueueHandles;
+}Task_Param_t;
diff --git a/software/mpu/src/boot.c b/software/mpu/src/boot.c index 1f18918..d3b4d59 100644 --- a/software/mpu/src/boot.c +++ b/software/mpu/src/boot.c @@ -10,46 +10,63 @@ #include "task.h"
#include "queue.h"
-//static void kernel_Process_Task(void *Param);
-//static xTaskHandle *pkernel_TaskHandle;
-//static Task_Param_t kernel_Param;
+#define NUM_QUEUE_ITEMS_KERNEL ((unsigned long) 2)
+#define NUM_QUEUE_ITEMS_CAMERA ((unsigned long) 2)
+#define NUM_QUEUE_ITEMS_LIGHTSENS ((unsigned long) 2)
-Status_t kernel_Init_Kernel(xQueueHandle * pxQueue);
+Status_t kernel_Init_Kernel(QH_t xQueues);
+Status_t camera_Init_Camera(QH_t xQueues);
+Status_t lightsens_Init_LightSens(QH_t xQueues);
-Status_t boot_Init_Kernel(xQueueHandle * pxQueue)
+/*
+ * Globals */
+static QH_t qh;
+
+Status_t boot_Init_Kernel(QH_t xQueues)
{
- return kernel_Init_Kernel( pxQueue );
+ return kernel_Init_Kernel( xQueues );
}
-Status_t boot_Init_Camera(xQueueHandle * pxQueue)
+Status_t boot_Init_Camera(QH_t xQueues)
{
- return STATUS_OK;
+ return camera_Init_Camera( xQueues );
}
-Status_t boot_Init_LightSens(xQueueHandle * pxQueue)
+Status_t boot_Init_LightSens(QH_t xQueues)
{
- return STATUS_OK;
+ return lightsens_Init_LightSens( xQueues );
}
-Status_t boot_CreateQueues( xQueueHandle *pxQueue_Kernel,
- xQueueHandle *pxQueue_Camera,
- xQueueHandle *pxQueue_LightSens)
+Status_t boot_CreateQueues( xQueueHandle *phxQueue_Kernel,
+ xQueueHandle *phxQueue_Camera,
+ xQueueHandle *phxQueue_LightSens)
{
+ *phxQueue_Kernel = xQueueCreate(NUM_QUEUE_ITEMS_KERNEL, sizeof(Message_t));
+ *phxQueue_Camera = xQueueCreate(NUM_QUEUE_ITEMS_CAMERA, sizeof(Message_t));
+ *phxQueue_LightSens = xQueueCreate(NUM_QUEUE_ITEMS_LIGHTSENS, sizeof(Message_t));
+
return STATUS_OK;
+
}
void boot_Main(void)
{
/*
*
* */
+
+ xQueueHandle hxQueue_Kernel;
+ xQueueHandle hxQueue_Camera;
+ xQueueHandle hxQueue_LightSens;
+
Status_t Status;
- xQueueHandle * pxQueue_Kernel = NULL,
- * pxQueue_Camera = NULL,
- * pxQueue_LightSens = NULL;
- Status = boot_CreateQueues(pxQueue_Kernel, pxQueue_Camera, pxQueue_LightSens);
+ Status = boot_CreateQueues(&hxQueue_Kernel, &hxQueue_Camera, &hxQueue_LightSens);
+
+ qh.hxq_Kernel = hxQueue_Kernel;
+ qh.hxq_Camera = hxQueue_Camera;
+ qh.hxq_LightSens = hxQueue_LightSens;
- Status = boot_Init_Kernel(pxQueue_Kernel);
- Status = boot_Init_Camera(pxQueue_Camera);
- Status = boot_Init_LightSens(pxQueue_LightSens);
+ Status = boot_Init_Kernel(qh);
+ Status = boot_Init_Camera(qh);
+ Status = boot_Init_LightSens(qh);
/* Start the tasks. */
vTaskStartScheduler();
diff --git a/software/mpu/src/kernel.c b/software/mpu/src/kernel.c index 71ef57f..d75f9dd 100644 --- a/software/mpu/src/kernel.c +++ b/software/mpu/src/kernel.c @@ -8,15 +8,11 @@ #include "FreeRTOS.h"
#include "queue.h"
-#define kernel_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
-#define kernel_TASK_STACK_SIZE ( ( unsigned short ) 32 )
+#define kernel_TASK_PRIORITY ( tskIDLE_PRIORITY + 5 )
+#define kernel_TASK_STACK_SIZE ( ( unsigned short ) 64 )
/* Globals */
-xQueueHandle * gpxQueue_Kernel;
-//static xTaskHandle *pkernel_TaskHandle;
-//static Task_Param_t kernel_Param;
-xTaskHandle *pkernel_TaskHandle;
-Task_Param_t kernel_Param;
+static Task_Param_t kernel_Param;
/*
* Wake up other tasks, send them messages telling what to do,
@@ -26,29 +22,56 @@ Task_Param_t kernel_Param; static void kernel_Process_Task(void *Param)
{
Message_t Msg;
+ Message_t SndMsg;
+ portTickType tick;
+ portCHAR chBufCam[10] = "Seas Cam!";
+ portCHAR chBufLSen[10] = "Seas LSe!";
+ if(NULL == kernel_Param.QueueHandles.hxq_Kernel)
+ {
+ return;
+ }
+
+ tick = xTaskGetTickCount();
while(1)
{
- xQueueReceive( gpxQueue_Kernel, &Msg, portMAX_DELAY );
- /*TODO: execute desired command of message */
-
- /*
- * switch Msg.Sender
- *
- * case Sender_Kernel:
- * yeah, that's myself
- *
- */
+ vTaskDelayUntil(&tick, MS(3));
+
+ if( xQueueReceive( kernel_Param.QueueHandles.hxq_Kernel, &Msg, MS(5)))
+ {
+ /*
+ * switch Msg.Sender and act accordingly.
+ */
+ switch (Msg.Sender)
+ {
+ case Sender_Camera:
+ {
+ SndMsg.Sender = Sender_Kernel;
+ SndMsg.pData = chBufCam;
+ xQueueSend(kernel_Param.QueueHandles.hxq_Camera, &SndMsg, MS(10));
+ }
+
+ case Sender_LightSens:
+ {
+ SndMsg.Sender = Sender_Kernel;
+ SndMsg.pData = chBufLSen;
+ xQueueSend(kernel_Param.QueueHandles.hxq_LightSens, &SndMsg, MS(10));
+ }
+ default: {;}
+ }
+ }
}
}
-Status_t kernel_Init_Kernel(xQueueHandle * pxQueue)
+Status_t kernel_Init_Kernel(QH_t hxQueues)
{
- kernel_Param.pxQueue = pxQueue;
+portBASE_TYPE xResult;
+
+ xResult = xTaskCreate( kernel_Process_Task, (signed char *) "Kernel",
+ kernel_TASK_STACK_SIZE, &kernel_Param,
+ kernel_TASK_PRIORITY, &(kernel_Param.hxTask_Self) );
- xTaskCreate( kernel_Process_Task, (signed char *) "Kernel",
- kernel_TASK_STACK_SIZE, &kernel_Param,
- kernel_TASK_PRIORITY, pkernel_TaskHandle );
+ kernel_Param.QueueHandles = hxQueues;
/*TODO: check for success and pass it over to caller. */
return STATUS_OK;
diff --git a/software/mpu/src/main.c b/software/mpu/src/main.c index e23c44b..e7f69f1 100644 --- a/software/mpu/src/main.c +++ b/software/mpu/src/main.c @@ -11,5 +11,10 @@ void boot_Main(void); int main(void)
{
+#if 1
boot_Main();
+#endif
+
+ /* If we ever reach this point, then there is something very wrong. */
+ return -1;
}
|