|
|
@@ -35,12 +35,23 @@
|
|
|
* This file is part of the tiny usb stack.
|
|
|
*/
|
|
|
|
|
|
+#ifdef TUSB_CFG_OS
|
|
|
+#undef TUSB_CFG_OS
|
|
|
+#endif
|
|
|
+
|
|
|
+#define TUSB_CFG_OS TUSB_OS_NONE
|
|
|
#include "unity.h"
|
|
|
-#include "osal_none.h"
|
|
|
+#include "osal.h"
|
|
|
+
|
|
|
+uint32_t statements[10];
|
|
|
+osal_semaphore_t sem;
|
|
|
+osal_semaphore_handle_t sem_hdl;
|
|
|
|
|
|
void setUp(void)
|
|
|
{
|
|
|
-
|
|
|
+ memset(statements, 0, sizeof(statements));
|
|
|
+ sem = 0;
|
|
|
+ sem_hdl = osal_semaphore_create(&sem);
|
|
|
}
|
|
|
|
|
|
void tearDown(void)
|
|
|
@@ -48,9 +59,78 @@ void tearDown(void)
|
|
|
|
|
|
}
|
|
|
|
|
|
-void test_queue_put_invalid_para(void)
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+// Semaphore
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+void test_semaphore_create(void)
|
|
|
{
|
|
|
+ TEST_ASSERT_EQUAL_PTR(&sem, sem_hdl);
|
|
|
+ TEST_ASSERT_EQUAL(0, sem);
|
|
|
+}
|
|
|
+
|
|
|
+void test_semaphore_post(void)
|
|
|
+{
|
|
|
+ osal_semaphore_post(sem_hdl);
|
|
|
+ TEST_ASSERT_EQUAL(1, sem);
|
|
|
+}
|
|
|
+
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+// Queue
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+void test_queue_create(void)
|
|
|
+{
|
|
|
+ TEST_IGNORE();
|
|
|
// osal_queue_put();
|
|
|
}
|
|
|
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+// TASK
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+void sample_task_semaphore(void)
|
|
|
+{
|
|
|
+ OSAL_TASK_LOOP
|
|
|
+ {
|
|
|
+ OSAL_TASK_LOOP_BEGIN
|
|
|
+
|
|
|
+ statements[0]++;
|
|
|
+
|
|
|
+ osal_semaphore_wait(sem_hdl, OSAL_TIMEOUT_WAIT_FOREVER);
|
|
|
+ statements[1]++;
|
|
|
+
|
|
|
+ osal_semaphore_wait(sem_hdl, OSAL_TIMEOUT_WAIT_FOREVER);
|
|
|
+ statements[2]++;
|
|
|
+
|
|
|
+ osal_semaphore_wait(sem_hdl, OSAL_TIMEOUT_WAIT_FOREVER);
|
|
|
+ statements[3]++;
|
|
|
+
|
|
|
+ OSAL_TASK_LOOP_END
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void test_task_with_semaphore(void)
|
|
|
+{
|
|
|
+ uint32_t i;
|
|
|
+ // several invoke before sempahore is available
|
|
|
+ for(i=0; i<10; i++)
|
|
|
+ sample_task_semaphore();
|
|
|
+ TEST_ASSERT_EQUAL(1, statements[0]);
|
|
|
+
|
|
|
+ // several invoke after posting semaphore
|
|
|
+ osal_semaphore_post(sem_hdl);
|
|
|
+ sample_task_semaphore();
|
|
|
+ TEST_ASSERT_EQUAL(1, statements[1]);
|
|
|
+
|
|
|
+ osal_semaphore_post(sem_hdl);
|
|
|
+ osal_semaphore_post(sem_hdl);
|
|
|
+ sample_task_semaphore();
|
|
|
+ TEST_ASSERT_EQUAL(1, statements[2]);
|
|
|
+ TEST_ASSERT_EQUAL(1, statements[3]);
|
|
|
+
|
|
|
+ // reach end of task loop, back to beginning
|
|
|
+ sample_task_semaphore();
|
|
|
+ TEST_ASSERT_EQUAL(2, statements[0]);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
|