- void ManagerInit(void) (初始化Manager管理員)
//產生一個線程來負責管理員
tx_result = tx_thread_create( &test_thread,
"test_thread",
(void(*)(ULONG)) TestManager,
0,
test_stack,
TEST_STACK_SIZE,
THR_PRI_NORMAL,
THR_PRI_NORMAL,
DEFAULT_TIME_SLICE,
TX_AUTO_START );
XASSERT( TX_SUCCESS == tx_result, tx_result );
// 產生一個消息隊列來處理消息
tx_result = tx_queue_create(&fuser_queue,
"test_queue",
SYS_MSG_SIZE,
fuser_messages,
sizeof(MESSAGE) * NUM_TEST_MESSAGES);
// (向系統註冊,名稱TEST,函數TestDebugCallback)
dbg_register_cmd( "Test", TestDebugCallback);
}
- static void TestManager(UINT unused) (產生一個Manager負責處理)
...
while(1)
{
//等待消息
tx_result = tx_queue_receive(&test_queue,
&msg,
TX_WAIT_FOREVER);
//當消息來的時候,負責處理
switch(msg.type)
{
case TEST_COMMAND_SET:
{
break;
}
...
- static int TestDebugCallback( int argc, char *argv[] )(使用者透過Terminal和這個Callback函數,就可以和管理員溝通,進而達到測試的功能。)
if( argc < 2 )
{
DPRINTF( (DBG_LOUD|DBG_OUTPUT), ("Supported commands:\n") );
DPRINTF( (DBG_LOUD|DBG_OUTPUT), ("Test set 500 \n") );
return 0;
}
else
{
//使用者輸入Test set
if ( strncmp( argv[1], "set", 4 ) == 0 ) {
msg.type = TEST_COMMAND_SET;
str_mkint(argv[2], &msg.data);
}
.........
//將指令傳到消息隊列,再由管理員根據指令來處理。
tx_res = tx_queue_send( &Test_queue,
&msg,
TX_NO_WAIT );
以下是使用者透過COM PORT6呼叫CallBack函數將指令TEST set傳給管理員。