summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-04-24 13:45:42 +0700
committerhathach <[email protected]>2013-04-24 13:45:42 +0700
commit574710dde57a466d0fee6d8b3ccb0366eb64deba (patch)
tree0f17789e987e2681d64ebc0c8525e185f2be8ce5
parentd312be700636258060765b63a5ea4f73aaa5500a (diff)
move main work in usbh_enumeration_task to its body subtask for task_assert style
-rw-r--r--tests/test/test_osal_none.c6
-rw-r--r--tinyusb/host/usbh.c18
-rw-r--r--tinyusb/osal/osal.h24
3 files changed, 18 insertions, 30 deletions
diff --git a/tests/test/test_osal_none.c b/tests/test/test_osal_none.c
index aebf1545b..f4a3f1324 100644
--- a/tests/test/test_osal_none.c
+++ b/tests/test/test_osal_none.c
@@ -266,8 +266,6 @@ tusb_error_t sample_flow_control_subtask2(void)
tusb_error_t sample_flow_control_subtask(void)
{
- tusb_error_t error;
-
OSAL_SUBTASK_BEGIN
OSAL_SUBTASK_INVOKED_AND_WAIT (sample_flow_control_subtask2());
@@ -277,11 +275,9 @@ tusb_error_t sample_flow_control_subtask(void)
tusb_error_t sample_task_flow_control(void)
{
- tusb_error_t error;
-
OSAL_TASK_LOOP_BEGIN
- OSAL_SUBTASK_INVOKED_AND_WAIT ( sample_flow_control_subtask() );
+ sample_flow_control_subtask();
OSAL_TASK_LOOP_END
}
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index f366c9adc..8e525cdf5 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -249,8 +249,22 @@ void usbh_device_unplugged_isr(uint8_t hostid)
//--------------------------------------------------------------------+
// ENUMERATION TASK
//--------------------------------------------------------------------+
+tusb_error_t enumeration_body_subtask(void);
+
+// To enable the TASK_ASSERT style (quick return on false condition) in a real RTOS, a task must act as a wrapper
+// and is used mainly to call subtasks. Within a subtask return statement can be called freely, the task with
+// forever loop cannot have any return at all.
OSAL_TASK_FUNCTION(usbh_enumeration_task)
{
+ OSAL_TASK_LOOP_BEGIN
+
+ enumeration_body_subtask();
+
+ OSAL_TASK_LOOP_END
+}
+
+tusb_error_t enumeration_body_subtask(void)
+{
tusb_error_t error;
usbh_enumerate_t enum_entry;
@@ -259,7 +273,7 @@ OSAL_TASK_FUNCTION(usbh_enumeration_task)
static uint8_t configure_selected = 1; // TODO move
static uint8_t *p_desc = NULL; // TODO move
- OSAL_TASK_LOOP_BEGIN
+ OSAL_SUBTASK_BEGIN
osal_queue_receive(enum_queue_hdl, &enum_entry, OSAL_TIMEOUT_WAIT_FOREVER, &error);
@@ -444,7 +458,7 @@ OSAL_TASK_FUNCTION(usbh_enumeration_task)
tusbh_device_mount_succeed_cb(new_addr);
- OSAL_TASK_LOOP_END
+ OSAL_SUBTASK_END
}
//--------------------------------------------------------------------+
diff --git a/tinyusb/osal/osal.h b/tinyusb/osal/osal.h
index 91ad3be45..8c33dc273 100644
--- a/tinyusb/osal/osal.h
+++ b/tinyusb/osal/osal.h
@@ -96,34 +96,12 @@ tusb_error_t osal_task_create(osal_task_t *task);
#define OSAL_TASK_LOOP_END
//------------- Sub Task -------------//
-#define OSAL_SUBTASK_INVOKED_AND_WAIT(subtask) TASK_ASSERT_STATUS(subtask)
-
-#define TASK_RESTART
+#define OSAL_SUBTASK_INVOKED_AND_WAIT(subtask) SUBTASK_ASSERT_STATUS(subtask)
#define OSAL_SUBTASK_BEGIN
#define OSAL_SUBTASK_END \
return TUSB_ERROR_NONE;
-//------------- Task Assert -------------//
-#define _TASK_ASSERT_ERROR_HANDLER(error, func_call)\
- func_call; TASK_RESTART; return error
-
-#define TASK_ASSERT_STATUS(sts) \
- ASSERT_DEFINE_WITH_HANDLER(_TASK_ASSERT_ERROR_HANDLER, , tusb_error_t status = (tusb_error_t)(sts),\
- TUSB_ERROR_NONE == status, (void) 0, "%s", TUSB_ErrorStr[status])
-
-#define TASK_ASSERT_STATUS_WITH_HANDLER(sts, func_call) \
- ASSERT_DEFINE_WITH_HANDLER(_TASK_ASSERT_ERROR_HANDLER, func_call, tusb_error_t status = (tusb_error_t)(sts),\
- TUSB_ERROR_NONE == status, (void) 0, "%s", TUSB_ErrorStr[status])
-
-#define TASK_ASSERT(condition) \
- ASSERT_DEFINE_WITH_HANDLER(_TASK_ASSERT_ERROR_HANDLER, , ,\
- condition, (void) 0, "%s", "evaluated to false")
-
-#define TASK_ASSERT_WITH_HANDLER(condition, func_call) \
- ASSERT_DEFINE_WITH_HANDLER(_TASK_ASSERT_ERROR_HANDLER, func_call, ,\
- condition, (void) 0, "%s", "evaluated to false")
-
//------------- Sub Task Assert (like Task but return error) -------------//
#define _SUBTASK_ASSERT_ERROR_HANDLER(error, func_call)\
func_call; return error