Example #1
0
void test2()
{
    const int delays[] = {1, 2, 100, 500, 1000, 2000};
    const int num_messages = 6;
    int message_num;
    int sender_id;
    void* message;
    
    message_num = 0;
    while (1) 
    {
        message = g_test_fixture.receive_message(&sender_id);
        printf_1("Process 2 expected message with delay %i...",
                 delays[message_num]);            
        if (((message_envelope*)message)->delay == delays[message_num]) {
            printf_0("success.\r\n");
        } else { 
            printf_0("fail.\r\n");
        }
        
        message_num++;
        
        if (message_num == num_messages) {
            printf_1("Process 2 received %i messages total...success.\r\n",
                     num_messages);
            printf_0(GID"_test: END\r\n");
        } else if (message_num > num_messages) {
            printf_1("Process 2 received over %i messages total...fail.\r\n",
                     num_messages);
        }

        g_test_fixture.release_memory_block(message);        
        g_test_fixture.release_processor();
    }
}
Example #2
0
main()
{
	printf_1("five = %d\n", 5);

	printf_proper("hello\n");
	printf_proper("%d %s\n", 2, "yo");
}
Example #3
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{
  /* Configure hardware */
  HardwareConfigure();

  /* Main task */
  MainTask();

  /* Never run to here ! */
  printf_1("\r\nMake sure all task done !");
  while(1){};
}
Example #4
0
/* third party dummy test process 2 */ 
void test2()
{
    int previous_priority;
    int current_priority;

    rtx_dbug_outs((CHAR *)"rtx_test: test2\r\n");

    previous_priority = g_test_fixture.get_process_priority(2);
    while (1) {
        current_priority = g_test_fixture.get_process_priority(2);
        if (previous_priority != current_priority) {
            previous_priority = current_priority;
            printf_1("PID2 : priority = %i\r\n", previous_priority);
        }

        g_test_fixture.release_processor();
    }
}
Example #5
0
void init_memory(void* memory_start) {
    int i;
    int *current_block;
    
    //
    // The head pointer starts at the start of free memory plus
    // the space required for all our memory blocks
    // Since this is pointer arithmetic, adding 1 adds 4 bytes.
    //
    
    mem_end = memory_start;
    memory_head = (void*)((int)memory_start + ((NUM_MEM_BLKS-1)*MEM_BLK_SIZE));

#ifdef DEBUG_MEM
    printf_1("MEMORY HEAD: %x\n\r", memory_head);
#endif

    //
    // Iterate through the memory pool and setup the free list.
    // The first 4 bytes of each memory block contain the address
    // of the next free memory block.
    //
   
    current_block = (int*)memory_head;
    for (i = 0; i < NUM_MEM_BLKS; i++) {
        *current_block = (int)current_block - MEM_BLK_SIZE;
        if (i == NUM_MEM_BLKS - 1) {
            *current_block = NULL;
            break;
        }
        current_block = (void*)(*current_block);
    }

    //
    // Setup the memory allocation field. Each bit in this field
    // represents one block in the pool. A value of 0 means 
    // the block has not been allocated, 1 means the block has been allocated.
    //
    
    memory_alloc_field = 0x00000000;
}
Example #6
0
void test_management() {
    const int total_tests = 3;
    int successes;
    int failures;

    int sender_id;
    int test_case;
    int test_result;
    message_envelope* message;

    successes = 0;
    failures = 0;
    test_result = 0;
    while(1) {
        message = (message_envelope*)g_test_fixture.receive_message(&sender_id);
        test_case = message->data[0];
        test_result = message->data[1];
        
        if (test_case == 1) {

            //
            // Begin test 2
            //

            g_test_fixture.set_process_priority(TEST_DELAY_SENDER_PID, 3);
            g_test_fixture.set_process_priority(TEST_DELAY_RECEIVER_PID, 3);
            g_test_fixture.set_process_priority(TEST_MEMORY_WATCHDOG_PID, 2);
            g_test_fixture.set_process_priority(TEST_MEMORY_ALLOCATOR_PID, 2);
            g_test_fixture.send_message(TEST_MEMORY_WATCHDOG_PID, message);
        } else if (test_case == 2) {

            //
            // Final test case finished. Release the message block.
            //

            g_test_fixture.set_process_priority(TEST_MEMORY_WATCHDOG_PID, 3);
            g_test_fixture.set_process_priority(TEST_MEMORY_ALLOCATOR_PID, 3);
            g_test_fixture.set_process_priority(TEST_ERROR_CHECK_PID, 2);

            g_test_fixture.send_message(TEST_ERROR_CHECK_PID, message);
        } else if (test_case == 3) {
            g_test_fixture.release_memory_block(message);
        }
        
        //
        // Update failure/success counters
        //

        if (test_result == TEST_SUCCESS) {
            successes++;
            printf_1(GID"_test: test %i OK\r\n", test_case);
        } else if (test_result == TEST_FAILURE) {
            failures++;
            printf_1(GID"_test: test %i FAIL\r\n", test_case);
        }

        //
        // See if we are finished the entire suite
        // 

        if ((successes + failures) == total_tests) {
            printf_1(GID"_test: %i/3 tests OK\r\n", successes);
            printf_1(GID"_test: %i/3 tests FAIL\r\n", failures);
            printf_0(GID"_test: END\r\n");
        }

#ifdef __DEBUG
        printf_1("Got a management message from case: %i\r\n", message->data[0]);
        printf_1("  Success code: %i\r\n", test_result);
        printf_1("  Successes: %i\r\n", successes);
        printf_1("  Failures: %i\r\n", failures);
#endif

    }
}
Example #7
0
void test_memory_allocator() {
    void* blocks[64];
    message_envelope* message;
    int sender_id;
    int i;
    int j;
    int failures;

    //
    // This process will allocate as much memory as it can, until it becomes blocked;
    //

    message = (message_envelope*)g_test_fixture.receive_message(&sender_id);
    if (sender_id == TEST_MEMORY_WATCHDOG_PID) {        
#ifdef _DEBUG
        printf_0("  Allocator running, allocating blocks.\r\n");
#endif

        i = 0;
        while (memory_blocks_full == 0) {
            blocks[i] = g_test_fixture.request_memory_block();
            memory_blocks_allocated++;
            i++;

#ifdef __DEBUG
            printf_1("    Allocated %i blocks total\r\n", memory_blocks_allocated);
#endif
        }

#ifdef _DEBUG
        printf_0("  Allocator running, cleaning up.\r\n");
#endif

        //
        // We return here when we got blocked and the watchdog ran and
        // released a block. Now we verify we can release all our blocks
        // without error.
        //

        failures = 0;

        for (j = 0; j < i; j++) {

#ifdef __DEBUG
            printf_1("    Deallocating block %i...", j);
#endif

            if (g_test_fixture.release_memory_block(blocks[j]) == RTX_ERROR) {
                failures++;
#ifdef __DEBUG
                printf_0("fail\r\n");
#endif
            } 

#ifdef __DEBUG
            else {
                printf_0("ok\r\n");
            }
#endif

        }

        //
        // Test done. Signal either success or failure, depending on how many
        // deallocations failed.
        // 

#ifdef _DEBUG
        printf_0("  Allocator done. Signaling success\r\n");
#endif

        message->data[0] = 2;
        if (failures == 0) {
            message->data[1] = TEST_SUCCESS;             
        } else {
            message->data[1] = TEST_FAILURE;  
        }

        g_test_fixture.send_message(TEST_MANAGEMENT_PID, message);
    } else {
        g_test_fixture.release_memory_block(message);
    }

    while(1) {
        g_test_fixture.release_processor();
    }
}
Example #8
0
void test_delay_receiver() {
    const int delays[] = {1, 10, 100, 500, 1000, 2000};
    const int num_messages = 6;
    const int expected_successes = 7;

    int failed;
    int message_num;
    int sender_id;
    int message_delay;
    int successes;
    message_envelope* message;
    
    failed = 0;
    successes = 0;
    message_num = 0;
    while (1) 
    {
        if ((message_num < num_messages) && failed == 0) {
            message = (message_envelope*)g_test_fixture.receive_message(&sender_id);

#ifdef _DEBUG
            printf_1("  Expected message with delay %i...",
                     delays[message_num]);
#endif
            memcpy(&message_delay, message->data, sizeof(message_delay));
            if (message_delay == delays[message_num]) {
                successes++;
#ifdef _DEBUG
                printf_0("ok.\r\n");
#endif
            } else {
#ifdef _DEBUG
                printf_0("fail.\r\n");
#endif
                failed = 1;
                message->data[0] = 1;
                message->data[1] = TEST_FAILURE;
                g_test_fixture.send_message(TEST_MANAGEMENT_PID, message);
            }
        
            message_num++;        
            if (message_num == num_messages) {
                successes++;

#ifdef _DEBUG
                printf_1("  Received %i messages total...success.\r\n",
                         num_messages);
#endif
            }

            if (successes == expected_successes) {

                //
                // Message the test management process with success
                //

#ifdef _DEBUG
                printf_0("  Done, sending message to management.\r\n");
#endif

                message->data[0] = 1;
                message->data[1] = TEST_SUCCESS;             
                g_test_fixture.send_message(TEST_MANAGEMENT_PID, message);
            } else {
                g_test_fixture.release_memory_block(message);
            }
        } else {
            g_test_fixture.release_processor();
        }
    }

    g_test_fixture.release_processor();
}
Example #9
0
void printf_0(const char* format) {
    printf_1(format, 0);
}
Example #10
0
void init_processes(VOID* stack_start) {
    int* stack_iter;
    int i;
    //
    // Setup null process
    // Entry point is defined in system_processes.c 
    //
   
    init_test_procs();
    init_user_procs();
    //
    // Iterate through all processes and setup their stack and state
    //
    
    // 
    for (i = 0; i < NUM_PROCESSES; i++) {
        //
        // Setup the process' stack pointer. The stack grows downward,
        // so the stack pointer for each process must be set to the end of the
        // memory allocated for each process' stack.
        //        
        
        processes[i].stack = stack_start + processes[i].stack_size;

        //
        // Setup the process' stack with an exception frame which points
        // to the entry point of the process.
        //

        stack_iter = (int*)processes[i].stack;

        //
        // Exception frame used to start this process
        // See section 11.1.2 of Coldfire Family Programmer's Reference Manual
        //

#ifdef INIT_DEBUG
    printf_1("SETTING ENTRY FOR %i...", i);
#endif
 
        *(--stack_iter) = (int)processes[i].entry; // PC 
        if (processes[i].is_i_process) {
            *(--stack_iter) = 0x40002700; // SR
        } else {
            *(--stack_iter) = 0x40002000; // SR
        }

#ifdef INIT_DEBUG
        printf_0("  done\r\n");
#endif
        //
        // Save the stack pointer
        // 
        
        processes[i].stack = (void*)stack_iter;

        // 
        // The process is currently stopped
        // 
        
        processes[i].state = STATE_STOPPED;

        //
        // Setup message queue
        // 
        
        processes[i].messages.head = NULL;
        processes[i].messages.tail = NULL;

        //
        // Update the location of the next stack and move to the next process
        //

        processes[i].queue = QUEUE_NONE;
        stack_start = stack_start + processes[i].stack_size;
    }

    //
    // No process is running
    //
    running_process = NULL;
}