Studentenversion des ESY6/A Praktikums "signal_processing".
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

signal_processing.c 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "signal_processing.h"
  2. #include "task.h"
  3. #include "task_sine.h"
  4. #include "task_cosinus.h"
  5. #include "task_rand.h"
  6. #include "task_add.h"
  7. #include "task_sub.h"
  8. #include "task_fft.h"
  9. #include "task_crc.h"
  10. #include "binding.h"
  11. #include "data_channel.h"
  12. #include <system.h>
  13. #include <stdio.h>
  14. const uint32_t TASK_CONNECTIONS[ TASK_COUNT ] = { 3, 3, 4, 4, 5, 6, 7 };
  15. void * TASK_LIST [ TASK_COUNT ] = {
  16. & SINE_CONFIG,
  17. & COSINE_CONFIG,
  18. & RAND_CONFIG,
  19. & ADD_SINE_COSINE_CONFIG,
  20. & ADD_RAND_CONFIG,
  21. & FFT_CONFIG,
  22. & CRC_CONFIG
  23. };
  24. void signal_processing_init( SignalProcessing * system, const uint32_t * bindings ) {
  25. system->bindings = bindings;
  26. for ( uint32_t i = 0; i < TASK_COUNT; ++i ) {
  27. task_bind( TASK_LIST[ i ], system->bindings[ i ] );
  28. }
  29. for ( uint32_t i = 0; i < CHANNEL_COUNT; ++i ) {
  30. DataChannelBinding channel_binding;
  31. binding_get_channel_binding( TASK_CONNECTIONS, system->bindings, i,
  32. & channel_binding );
  33. data_channel_bind( DATA_CHANNEL_BASE_LIST[ i ], & channel_binding );
  34. }
  35. }
  36. void signal_processing_run( SignalProcessing * system ) {
  37. for ( uint32_t i = 0; i < TASK_COUNT; ++i ) {
  38. int ret = task_run( TASK_LIST[ i ] );
  39. if ( ret ) {
  40. printf( "ERROR while executing task %" PRIu32 "\n", i );
  41. }
  42. }
  43. }
  44. void signal_processing_print_results( SignalProcessing * system ) {
  45. printf( " | Software | Hardware\n" );
  46. printf( "----------------+------------+------------\n" );
  47. for ( uint32_t i = 0; i < TASK_COUNT; ++i ) {
  48. task_base_config * task = TASK_LIST[ i ];
  49. printf( "%15s |", task->name );
  50. if ( system->bindings[ i ] == BINDING_SW ) {
  51. printf( " %10" PRIu32 " |\n", task_get_cycle_count( TASK_LIST[ i ] ) );
  52. }
  53. else {
  54. printf( " | %10" PRIu32 "\n", task_get_cycle_count( TASK_LIST[ i ] ) );
  55. }
  56. }
  57. printf( "\n" );
  58. }