\r
// atleast 1\r
#define SERVICE_CNT 1\r
-
-
-#if ( OS_SC3 == STD_ON) || ( OS_SC4==STD_ON)\r
-GEN_TRUSTEDFUNCTIONS_LIST\r
-\r
-//--- APPLICATIONS ----\r
-\r
-GEN_APPLICATION_HEAD {\r
-\r
- GEN_APPLICATON( 0,\r
- "application_1",\r
- true,\r
- NULL,NULL,NULL , 0,0,0,0,0,0 )\r
-};\r
-#endif
\r
// --- RESOURCES ---\r
\r
GEN_RESOURCE_HEAD {\r
- GEN_RESOURCE(RES_SCHEDULER,RESOURCE_TYPE_STANDARD,0,0,0), // Standard resource..\r
+ GEN_RESOURCE( RES_SCHEDULER,
+ RESOURCE_TYPE_STANDARD, /* standard, linked, internal */
+ 0) /* ceiling priority */
};\r
\r
//--- TASKS ----\r
\r
GEN_TASK_HEAD {\r
GEN_ETASK( OsIdle,\r
- 0,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
+ 0,
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),\r
\r
GEN_ETASK( etask_1,\r
1,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),
\r
GEN_ETASK( etask_2,\r
2,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
-\r
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),
\r
GEN_BTASK( btask_3,\r
3,\r
- false/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
+ FULL, /* scheduling */
+ false, /* autostart */
+ NULL, /* internal resource */
+ 0, /* rsrc mask */
+ 1 /* activation limit */),
};\r
\r
GEN_PCB_LIST()\r
// --- RESOURCES ---\r
\r
GEN_RESOURCE_HEAD {\r
- GEN_RESOURCE(RES_SCHEDULER,RESOURCE_TYPE_STANDARD,0,0,0), // Standard resource..\r
+ GEN_RESOURCE(RES_SCHEDULER,RESOURCE_TYPE_STANDARD,0), // Standard resource..\r
};\r
\r
//--- TASKS ----\r
DECLARE_STACK(btask_3,PRIO_STACK_SIZE);\r
\r
GEN_TASK_HEAD {\r
- GEN_ETASK( OsIdle,\r
- 0,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
-\r
- GEN_ETASK( etask_1,\r
- 1,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
-\r
- GEN_ETASK( etask_2,\r
- 2,\r
- true/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
-\r
-\r
- GEN_BTASK( btask_3,\r
- 3,\r
- false/*auto*/,\r
- NULL/*tm*/,\r
- APPLICATION_ID_application_1/*app*/,\r
- NULL/*rsrc*/),\r
+ GEN_ETASK( OsIdle,
+ 0,
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),
+
+ GEN_ETASK( etask_1,
+ 1,
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),
+
+ GEN_ETASK( etask_2,
+ 2,
+ FULL, /* scheduling */
+ true, /* autostart */
+ NULL, /* internal resource */
+ 0 /* rsrc mask */),
+
+ GEN_BTASK( btask_3,
+ 3,
+ FULL, /* scheduling */
+ false, /* autostart */
+ NULL, /* internal resource */
+ 0, /* rsrc mask */
+ 1 /* activation limit */),
};\r
\r
GEN_PCB_LIST()\r
Irq_ResumeOs();
}
}
-
-#if 0
-/* Can't find these anymore, removed from Autosar? */\r
-StatusType EnableInterruptSource( ISRType EnableISR );\r
-StatusType DisableInterruptSource( ISRType EnableISR );\r
-#endif
\r
/*
* Class 2,3 and 4 API
-#if !( OS_CFG_API_VERSION)
-\r
-#define GEN_ETASK( _id, _priority, _autostart, _timing_protection, _application_id, _resource_int_p ) \\r
-{ \\r
- .pid = TASK_ID_##_id, \\r
- .name = #_id, \\r
- .entry = _id, \\r
- .prio = _priority, \\r
- .proc_type = PROC_EXTENDED, \\r
- .stack.size = sizeof stack_##_id, \\r
- .stack.top = stack_##_id, \\r
- .autostart = _autostart, \\r
- .timing_protection = _timing_protection,\\r
- .application_id = _application_id, \\r
- .resource_int_p = _resource_int_p, \
- .scheduling = FULL, \
- .resourceAccess = -1UL \\r
-}\r
-\r
-#define GEN_BTASK( _id, _priority, _autostart, _timing_protection, _application_id, _resource_int_p ) \\r
-{ \\r
- .pid = TASK_ID_##_id, \\r
- .name = #_id, \\r
- .entry = _id, \\r
- .prio = _priority, \\r
- .proc_type = PROC_BASIC, \\r
- .stack.size = sizeof stack_##_id, \\r
- .stack.top = stack_##_id, \\r
- .autostart = _autostart, \\r
- .timing_protection = _timing_protection,\\r
- .application_id = _application_id, \\r
- .resource_int_p = _resource_int_p, \
- .scheduling = FULL, \
- .resourceAccess = -1UL \\r
-}
-#else
-
-#define GEN_ETASK( _id, _priority, _autostart, _timing_protection, _application_id, \
- _resource_int_p, _scheduling, _resource_mask ) \
+/**
+ * _id
+ * _priority The task priority
+ * _autostart true/false
+ * _resource_int_p Pointer to internal resource.
+ * NULL - if no internal resource or scheduling==NON
+ * Pointer to
+ * _scheduling FULL or NON
+ * _resource_mask Mask of the resources used. Applies to STANDARD and LINKED (NOT INTERNAL)
+ * For example if this task would use resource with id 2 and 4 the mask would
+ * become (1<<2)|(1<<4) = 0x14 (limits resources to 32).
+ * Currently used for calculating the ceiling priority.
+ */
+#define GEN_ETASK( _id, _priority, _scheduling, _autostart, _resource_int_p, _resource_mask ) \
{ \
.pid = TASK_ID_##_id, \
.name = #_id, \
.stack.size = sizeof stack_##_id, \
.stack.top = stack_##_id, \
.autostart = _autostart, \
- .timing_protection = _timing_protection,\
- .application_id = _application_id, \
.resource_int_p = _resource_int_p, \
.scheduling = _scheduling, \
.resourceAccess = _resource_mask, \
.activationLimit = 1, \
}
-#define GEN_BTASK( _id, _priority, _autostart, _timing_protection, _application_id, \
- _resource_int_p, _scheduling, _resource_mask, _activation ) \
+#define GEN_BTASK( _id, _priority, _scheduling, _autostart, _resource_int_p, _resource_mask, _activation_limit ) \
{ \
.pid = TASK_ID_##_id, \
.name = #_id, \
.stack.size = sizeof stack_##_id, \
.stack.top = stack_##_id, \
.autostart = _autostart, \
- .timing_protection = _timing_protection,\
- .application_id = _application_id, \
.resource_int_p = _resource_int_p, \
.scheduling = _scheduling, \
.resourceAccess = _resource_mask, \
- .activationLimit = _activation, \
+ .activationLimit = _activation_limit, \
}
-#endif
-\r
-\r
-#define GEN_TASK( _id, _name, _entry, _priority, _process_type, _stack_size, _stack_top, \\r
- _autostart, _timing_protection, _application_id, _resource_int_p ) \\r
-{ \\r
- .pid = _id, \\r
- .name = _name, \\r
- .entry = _entry, \\r
- .prio = _priority, \\r
- .proc_type = _process_type, \\r
- .stack.size = _stack_size, \\r
- .stack.top = _stack_top, \\r
- .autostart = _autostart, \\r
- .timing_protection = _timing_protection,\\r
- .application_id = _application_id, \\r
- .resource_int_p = _resource_int_p, \\r
-}\r
\r
-#define GEN_ISR_2( _id, _name, _entry, _priority, _process_type, _vector, _timing_protection, _application_id ) \\r
+#define GEN_ISR_2( _id, _name, _entry, _priority, _vector ) \\r
{ \\r
.pid = _id, \\r
.name = _name, \\r
.entry = _entry, \\r
.prio = _priority, \\r
- .proc_type = _process_type, \\r
+ .proc_type = PROC_ISR2, \\r
.vector = _vector, \\r
- .timing_protection = _timing_protection,\\r
- .application_id = _application_id, \\r
}\r
\r
\r
//#define GEN_PCB_LIST() uint8_t pcb_list[PCB_T_SIZE*ARRAY_SIZE(rom_pcb_list)];
#define GEN_PCB_LIST() OsPcbType pcb_list[ARRAY_SIZE(rom_pcb_list)];
\r
-#define GEN_RESOURCE_HEAD OsResourceType resource_list[] =\r
-#define GEN_RESOURCE( _id, _type, _ceiling_priority, _application_id, _task_mask) \\r
+#define GEN_RESOURCE_HEAD OsResourceType resource_list[] =
+
+
+/**
+ * _id
+ * _type RESOURCE_TYPE_STANDARD, RESOURCE_TYPE_LINKED or RESOURCE_TYPE_INTERNAL
+ * _ceiling_priority The calculated ceiling priority
+ */\r
+#define GEN_RESOURCE( _id, _type, _ceiling_priority ) \\r
{ \\r
.nr= _id, \\r
.type= _type, \\r
.ceiling_priority = _ceiling_priority, \\r
- .application_owner_id = _application_id, \\r
- .task_mask = _task_mask, \\r
.owner = (-1), \\r
}\r
* _type
* _alarms_time
* _cycle_time
- * _app_mode
+ * _app_mode Mask of the application modes.
*/
#define GEN_ALARM_AUTOSTART(_id, _type, _alarm_time, _cycle_time, _app_mode ) \
const OsAlarmAutostartType Os_AlarmAutoStart_ ## _id = \
SLIST_ENTRY(OsAlarm) alarm_list;\r
#if (OS_SC1 == STD_ON)
-#warning Alarm callbacks NOT implemented
/* TODO: OS242, callback in scalability class 1 only..*/
- /** @req OS242 */
+ /** Missing req OS242 */
#endif
\r
} OsAlarmType;\r
* OS_RES_SCHEDULER
* */
+/**
+ * STD container: OsResource
+ * OsResourceProperty: 1 INTERNAL, LINKED, STANDARD
+ * OsResourceAccessingApplication: 0..*
+ * OsResourceLinkedResourceRef: 0..1
+ */
\r
typedef enum {\r
/* External resource */\r
- RESOURCE_TYPE_STANDARD,\r
+ RESOURCE_TYPE_STANDARD,//!< RESOURCE_TYPE_STANDARD\r
/* ?? */\r
- RESOURCE_TYPE_LINKED,\r
+ RESOURCE_TYPE_LINKED, //!< RESOURCE_TYPE_LINKED\r
/* Internal resource */
- RESOURCE_TYPE_INTERNAL\r
-} OsResourceTypeType;\r
-\r
-typedef struct {
-\r
- OsResourceTypeType type;\r
- /* used only if type is RESOURCE_TYPE_LINKED */\r
- ResourceType linked_resource;\r
+ RESOURCE_TYPE_INTERNAL //!< RESOURCE_TYPE_INTERNAL\r
} OsResourcePropertyType;\r
\r
/*-----------------------------------------------------------------*/\r
uint32 old_task_prio;\r
\r
// What application may access this resource. A resource may only be\r
- // accessed by one application\r
- uint32 application_owner_id;\r
+ // accessed by one application
+#if ( OS_SC3 == STD_ON ) || ( OS_SC4 == STD_ON )\r
+ uint32 application_owner_id;
+#endif\r
// What tasks may access this resource. A resource may be be shared\r
// several tasks.\r
- uint32 task_mask;\r
+// uint32 task_mask;\r
// Owner of the resource...\r
TaskType owner;\r
\r
- OsResourceTypeType type;\r
+ OsResourcePropertyType type;\r
// used only if type is RESOURCE_TYPE_LINKED\r
ResourceType linked_resource;\r
rsrc_p->ceiling_priority = topPrio;
}
- /* Assign an internal resource with prio 32 to the tasks
+
+
+ /* From OSEK:
+ * Non preemptable tasks are the most common usage of the concept
+ * of internal resources; they are tasks with a special internal
+ * resource of highest task priority assigned.
+ * --> Interpret this as we can set the priority to 32.
+ *
+ * Assign an internal resource with prio 32 to the tasks
* with scheduling=NON
+ *
+ *
*/
for( int i; i < Oil_GetTaskCnt(); i++) {
pcb_p = os_get_pcb(i);
*
*/
-#define valid_standard_id() (rid->nr < Oil_GetResourceCnt()) //&& !(rid->type == RESOURCE_TYPE_INTERNAL) )
-#define valid_internal_id() (rid->nr < Oil_GetResourceCnt()) //&& (rid->type == RESOURCE_TYPE_INTERNAL) )
+#define valid_standard_id() (rPtr->nr < Oil_GetResourceCnt()) //&& !(rPtr->type == RESOURCE_TYPE_INTERNAL) )
+#define valid_internal_id() (rPtr->nr < Oil_GetResourceCnt()) //&& (rPtr->type == RESOURCE_TYPE_INTERNAL) )
static StatusType GetResource_( OsResourceType * );
StatusType ReleaseResource_( OsResourceType * );
StatusType GetResource( ResourceType ResID ) {
- OsResourceType *rid = Oil_GetResource(ResID);
- StatusType rv = GetResource_(rid);
+ OsResourceType *rPtr = Oil_GetResource(ResID);
+ StatusType rv = GetResource_(rPtr);
if (rv != E_OK)
goto err;
OS_STD_END_1(OSServiceId_GetResource,ResID);
}
-#if 0
-StatusType GetResourceInternal( ResourceType ResID ) {
- return GetResource_(ResID,1);
-}
-#endif
-
-static StatusType GetResource_( OsResourceType * rid ) {
+static StatusType GetResource_( OsResourceType * rPtr ) {
StatusType rv = E_OK;
- if( rid->nr == RES_SCHEDULER ) {
+ if( rPtr->nr == RES_SCHEDULER ) {
// Lock the scheduler
os_sys.scheduler_lock = 1;
}
rv = E_OS_ID;
goto err;
}
- // Check that the resource does not belong to another application or task
- if( ( (os_task_nr_to_mask(get_curr_pid()) & rid->task_mask ) == 0 )
+
+ /* @req OSEK
+ * Attempt to get a resource which is already occupied by any task
+ * or ISR, or the statically assigned priority of the calling task or
+ * interrupt routine is higher than the calculated ceiling priority,
+ * E_OS_ACCESS
+ */
+ if( (Os_TaskGetCurrent()->prio > rPtr->ceiling_priority )
#if ( OS_SC3 == STD_ON ) || ( OS_SC4 == STD_ON )
- || ( get_curr_application_id() != rid->application_owner_id)
+ || ( get_curr_application_id() != rPtr->application_owner_id)
#endif
- || ( rid->owner != (TaskType)(-1)))
+ || ( rPtr->owner != (TaskType)(-1)))
{
rv = E_OS_ACCESS;
goto err;
}
- rid->owner = get_curr_pid();
- rid->old_task_prio = os_pcb_set_prio(Os_TaskGetCurrent() ,rid->ceiling_priority);
+ rPtr->owner = get_curr_pid();
+ rPtr->old_task_prio = os_pcb_set_prio(Os_TaskGetCurrent() ,rPtr->ceiling_priority);
- if( rid->type != RESOURCE_TYPE_INTERNAL ) {
- TAILQ_INSERT_TAIL(&Os_TaskGetCurrent()->resource_head, rid, listEntry);
+ if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {
+ TAILQ_INSERT_TAIL(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);
}
goto ok;
if( ResID == RES_SCHEDULER ) {
os_sys.scheduler_lock=0;
} else {
- OsResourceType *rid = Oil_GetResource(ResID);
- rv = ReleaseResource_(rid);
+ OsResourceType *rPtr = Oil_GetResource(ResID);
+ rv = ReleaseResource_(rPtr);
}
if (rv != E_OK)
OS_STD_END_1(OSServiceId_ReleaseResource,ResID);
}
-StatusType ReleaseResource_( OsResourceType * rid ) {
+StatusType ReleaseResource_( OsResourceType * rPtr ) {
if (!valid_standard_id()) {
return E_OS_ID;
} else {
// Release it...
- rid->owner = (TaskType) (-1);
- TAILQ_REMOVE(&Os_TaskGetCurrent()->resource_head, rid, listEntry);
- os_pcb_set_prio(Os_TaskGetCurrent(), rid->old_task_prio);
+ rPtr->owner = (TaskType) (-1);
+ TAILQ_REMOVE(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);
+ os_pcb_set_prio(Os_TaskGetCurrent(), rPtr->old_task_prio);
return E_OK;
}
}
//-------------------------------------------------------------------\r
\r
GEN_RESOURCE_HEAD {\r
- GEN_RESOURCE(RES_SCHEDULER,RESOURCE_TYPE_STANDARD,0,0,0), // Standard resource..\r
+ GEN_RESOURCE(RES_SCHEDULER,RESOURCE_TYPE_STANDARD,0), // Standard resource..\r
// Internal resources\r
- GEN_RESOURCE(1,RESOURCE_TYPE_INTERNAL,8, APPLICATION_ID_application_1,(1<<TASK_ID_etask_sup_l)),\r
+ GEN_RESOURCE(1,RESOURCE_TYPE_INTERNAL,0),\r
// external resource\r
- GEN_RESOURCE(2,RESOURCE_TYPE_STANDARD,3,0,0),
+ GEN_RESOURCE(2,RESOURCE_TYPE_STANDARD,0),
// external resource
- GEN_RESOURCE(3,RESOURCE_TYPE_STANDARD,4,0,0),
+ GEN_RESOURCE(3,RESOURCE_TYPE_STANDARD,0),
// external resource
- GEN_RESOURCE(4,RESOURCE_TYPE_STANDARD,5,0,0),
+ GEN_RESOURCE(4,RESOURCE_TYPE_STANDARD,0),
\r
};\r
\r
\r
GEN_TASK_HEAD {\r
\r
- GEN_ETASK(OsIdle,0,true/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0 ),\r
+ GEN_ETASK(OsIdle, 0, FULL, true/*auto*/, NULL/*rsrc*/, 0 ),\r
\r
/* extended */\r
- GEN_ETASK(etask_master,1,true/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, NON, 0),\r
+ GEN_ETASK(etask_master,1,FULL,true/*auto*/, NULL/*rsrc*/, 0 ),\r
\r
- GEN_ETASK(etask_sup_l,2,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0 ),\r
- GEN_ETASK(etask_sup_m,3,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0 ),\r
- GEN_ETASK(etask_sup_h,4,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0 ),\r
+ GEN_ETASK(etask_sup_l,2,FULL,false/*auto*/, NULL/*rsrc*/, 0 ),\r
+ GEN_ETASK(etask_sup_m,3,FULL,false/*auto*/, NULL/*rsrc*/, 0 ),\r
+ GEN_ETASK(etask_sup_h,4,FULL,false/*auto*/, NULL/*rsrc*/, 0 ),\r
\r
/* basic */\r
- GEN_BTASK(btask_sup_l,2,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0, 1 ),\r
- GEN_BTASK(btask_sup_m,3,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0, 1 ),\r
- GEN_BTASK(btask_sup_h,4,false/*auto*/, NULL/*tm*/, APPLICATION_ID_application_1/*app*/,NULL/*rsrc*/, FULL, 0, 1 ),\r
+ GEN_BTASK(btask_sup_l,2,FULL,false/*auto*/, NULL/*rsrc*/, 0, 1 ),\r
+ GEN_BTASK(btask_sup_m,3,FULL,false/*auto*/, NULL/*rsrc*/, 0, 1 ),\r
+ GEN_BTASK(btask_sup_h,4,FULL,false/*auto*/, NULL/*rsrc*/, 0, 1 ),\r
\r
- GEN_ISR_2( TASK_ID_os_tick, "dec", OsTick, /*prio*/ 11, /*type*/ PROC_ISR2, INTC_VECTOR_EXCEPTION_DEC , NULL, APPLICATION_ID_application_1),\r
+ GEN_ISR_2( TASK_ID_os_tick, "dec", OsTick, /*prio*/ 11, INTC_VECTOR_EXCEPTION_DEC ),\r
#if 0\r
// Use the intc_vector tables for now\r
GEN_ISR_2( TASK_ID_isr_dec, "dec", my_dec, /*prio*/ 11, /*type*/ PROC_ISR2, INTC_VECTOR_EXCEPTION_DEC , NULL, APPLICATION_ID_application_1),\r
// File to load and save configuration settings to file\r
//\r
-// Commands: \r
+// Commands:\r
// load - load config\r
-// save - save present configuration \r
+// save - save present configuration\r
// debug - print some useful data\r
\r
// global configuration macros\r
GLOBAL &cfg_project_path_g\r
GLOBAL &cfg_loadfile_g\r
GLOBAL &cfg_cpu_g\r
+GLOBAL &cfg_cpu_family_g\r
+\r
\r
// Global macros\r
LOCAL &data_file\r
LOCAL &user &cpu\r
&user=os.env("username")\r
//&cpu=CPU()\r
-//&data_file="~~~\cfg_t32_"+"&user"+"_"+"&cfg_cpu_g"+".txt" \r
+//&data_file="~~~\cfg_t32_"+"&user"+"_"+"&cfg_cpu_g"+".txt"\r
//&global_file="~~~\cfg_t32"\r
&data_file="~~~\cfg_t32.txt"\r
//+"&cfg_cpu_g"+".txt"\r
\r
rm:\r
rm &data_file\r
- RETURN \r
- \r
+ RETURN\r
+\r
//--------------------------------------------------------------------\r
\r
load:\r
\r
print "loading config from &data_file"\r
- \r
- if OS.FILE(&data_file) \r
+\r
+ if OS.FILE(&data_file)\r
(\r
OPEN #1 &data_file /read\r
- READ #1 &cfg_project_path_g \r
- READ #1 &cfg_loadfile_g \r
- READ #1 &cfg_cpu_g \r
+ READ #1 &cfg_project_path_g\r
+ READ #1 &cfg_loadfile_g\r
+ READ #1 &cfg_cpu_g\r
+ READ #1 &cfg_cpu_family_g\r
CLOSE #1\r
- ) \r
- ELSE \r
+ )\r
+ ELSE\r
(\r
&cfg_project_path_g=""\r
&cfg_loadfile_g=""\r
&cfg_cpu_g=""\r
+ &cfg_cpu_family_g=""\r
)\r
RETURN\r
\r
save:\r
print "Saving config to &data_file"\r
OPEN #1 &data_file /create\r
- WRITE #1 "&cfg_project_path_g" \r
+ WRITE #1 "&cfg_project_path_g"\r
WRITE #1 "&cfg_loadfile_g"\r
WRITE #1 "&cfg_cpu_g"\r
+ WRITE #1 "&cfg_cpu_family_g"\r
CLOSE #1\r
RETURN\r
\r
print " project_path: &cfg_project_path_g"\r
print " load file: &cfg_loadfile_g"\r
print " cpu: &cfg_cpu_g"\r
+ print " cpu_fam: &cfg_cpu_family_g"\r
RETURN\r
\r
\r
\r
dialog_cpu:\r
dialog\r
-(& \r
+(&\r
HEADER "Select cpu"\r
POS 0. 0. 14.\r
BUTTON "mpc5516" "jumpto mpc5516"\r
pos 1. 1. 14.\r
text "CPU:"\r
pos 1. 2. 10.\r
-CPU: PULLDOWN "mpc5516,mpc5554,mpc5633M,CortexM3"\r
+CPU: PULLDOWN "mpc5516,mpc5554,mpc5633M,CortexM3,HC12DG128A"\r
(\r
)\r
HEADER "Project config"\r
P_PATH: EDIT "&cfg_project_path_g" ""\r
pos 51. 4. 3.\r
BUTTON "..."\r
- ( \r
+ (\r
Dialog.Setdir P_PATH "&cfg_project_path_g/*"\r
- ) \r
+ )\r
pos 35. 6. 10.\r
DEFBUTTON "Set" "jumpto save_close"\r
pos 45. 6. 10.\r
win_close:\r
dialog.end\r
\r
-// \r
+//\r
\r
enddo\r
\r
\r
- \r
+\r
\r
\r
\r
\r
LOCAL &cmd &arg1 &arg2\r
ENTRY &cmd &arg1 &arg2\r
-gosub &cmd\r
+\r
+if CPU()=="HC12DG128A"\r
+(\r
+ LOCAL &var\r
+ &var="&cmd"+"_"+"&cfg_cpu_g"\r
+ gosub &var\r
+)\r
+ELSE\r
+ gosub &cmd\r
+\r
+\r
\r
enddo\r
\r
RETURN\r
\r
\r
+ enddo\r
+\r
+\r
//-------------------------------------------------------------\r
load:\r
LOCAL &file\r
dialog.file "&cfg_project_path_g"/*.elf\r
ENTRY &file\r
- \r
- IF OS.FILE(&file) \r
+\r
+ IF OS.FILE(&file)\r
&cfg_loadfile_g="&file"\r
- \r
- do config save \r
+\r
+ do config save\r
do flash open\r
- data.load.elf &cfg_loadfile_g /CYGDRIVE /GNU \r
+ data.load.elf &cfg_loadfile_g /CYGDRIVE /GNU\r
do flash close\r
print "&cfg_loadfile_g"\r
\r
enddo\r
\r
-//------------------------------------------------------------- \r
+//-------------------------------------------------------------\r
reload:\r
print "&cfg_loadfile_g"\r
sys.up\r
- r.reset \r
+ r.reset\r
do flash init\r
do flash open\r
data.load.elf &cfg_loadfile_g /GNU /CYGDRIVE\r
\r
enddo\r
\r
+//-------------------------------------------------------------\r
+reload_HC12DG128A:\r
+ print "&cfg_loadfile_g"\r
+ sys.up\r
+ r.reset\r
+ do flash init\r
+ do flash open\r
+ y.reset\r
+ map.reset\r
+ mmu.reset\r
+ sys.option MEMEXP ON\r
+ mmu.create 0x388000--0x3883ff a:0x0f0000\r
+; mmu.trans 0x0f0000--0x0f3fff\r
+ mmu.on\r
+ data.load.elf &cfg_loadfile_g /GNU /CYGDRIVE\r
+// y.reloc (a:0x388000-0x8000)\r
+// /CYGDRIVE\r
+ do flash close\r
+\r
+ GOSUB postload_&cfg_cpu_g\r
+ enddo\r
+\r
+//-------------------------------------------------------------\r
+\r
postload_CortexM3:\r
r.s MSP 0x20005000\r
RETURN\r
postload_mpc5633M:\r
RETURN\r
\r
+postload_HC12DG128A:\r
+ RETURN\r
+\r
//-------------------------------------------------------------\r
\r
path_fast:\r
\r
\r
\r
- \r
+\r
\r
\r
\r
//ENTRY &cpu\r
\r
//do ~~/t32.cmm\r
-winclear \r
+winclear\r
&proj_path=os.pwd()\r
do t32.cmm\r
\r
-print "Current project path:" "&proj_path" \r
+print "Current project path:" "&proj_path"\r
\r
do config load\r
-//do config debug \r
+//do config debug\r
\r
-\r
-IF "&cfg_cpu_g"==""\r
+IF ("&cfg_cpu_g"=="")||(CPUFAMILY()!="&cfg_cpu_family_g")\r
(\r
do config dialog_project\r
)\r
\r
IF "&cfg_project_path_g"==""\r
(\r
- &cfg_project_path_g="&proj_path" \r
+ &cfg_project_path_g="&proj_path"\r
do config dialog_project\r
)\r
\r
-//do config debug \r
+//do config debug\r
\r
&cpu="&cfg_cpu_g"\r
\r
\r
sys.cpu &cpu\r
\r
-IF SIMULATOR() \r
+IF SIMULATOR()\r
(\r
IF CPU()!="CortexM3"\r
(\r
do sim_mpc55xx\r
)\r
)\r
-ELSE \r
+ELSE\r
(\r
sys.bdmclock 10000000.\r
)\r
\r
\r
// Setup flash\r
-SYStem.Up \r
+SYStem.Up\r
do flash init\r
- \r
\r
-IF !SIMULATOR() \r
-( \r
+\r
+IF !SIMULATOR()\r
+(\r
break.select program onchip\r
)\r
\r