Revision 3da12676

View differences:

core/inc/aos_shell.h
35 35
/* CONSTANTS                                                                  */
36 36
/******************************************************************************/
37 37

  
38

  
39

  
40 38
/**
41 39
 * @brief   Shell event flag that is emitted when the thread starts.
42 40
 */
......
242 240
   */
243 241
  thread_t* thread;
244 242

  
243
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
244

  
245
  /**
246
   * @brief   Name of the shell and the associated thread.
247
   */
248
  const char* name;
249

  
250
#endif /* (CH_CFG_USE_REGISTRY == TRUE) */
251

  
245 252
  /**
246 253
   * @brief   Event source.
247 254
   */
......
333 340
#if defined(__cplusplus)
334 341
extern "C" {
335 342
#endif /* defined(__cplusplus) */
336
  void aosShellInit(aos_shell_t* shell, const char* prompt, char inbuf[], size_t entries, size_t linewidth, size_t numargs);
343
  void aosShellInit(aos_shell_t* shell, const char* name, const char* prompt, char inbuf[], size_t entries, size_t linewidth, size_t numargs);
337 344
  void aosShellStreamInit(AosShellStream* stream);
338 345
  void aosShellChannelInit(AosShellChannel* channel, BaseAsynchronousChannel* asyncchannel);
339 346
  aos_status_t aosShellAddCommand(aos_shell_t* shell, aos_shellcommand_t* cmd);
core/src/aos_main.cpp
78 78
/* LOCAL VARIABLES                                                            */
79 79
/******************************************************************************/
80 80

  
81
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
82

  
83
/**
84
 * @brief   Name of the main thread.
85
 */
86
static const char _threadName[] = "control (main)";
87

  
88
#endif /* (CH_CFG_USE_REGISTRY == TRUE) */
89

  
81 90
/**
82 91
 * @brief   Listener object for GPIO events.
83 92
 */
......
269 278
#if defined(MODULE_INIT_KERNEL_EXTRA)
270 279
  MODULE_INIT_KERNEL_EXTRA();
271 280
#endif /* defined(MODULE_INIT_KERNEL_EXTRA) */
281
#if (CH_CFG_USE_REGISTRY == TRUE)
282
  currp->name = _threadName;
283
#endif /* (CH_CFG_USE_REGISTRY == TRUE) */
272 284

  
273 285
  // AMiRo-OS, additional interrupts and custom OS additions (if any)
274 286
#if (AMIROOS_CFG_SHELL_ENABLE == true)
core/src/aos_shell.c
1838 1838
 * @brief   Initializes a shell object with the specified parameters.
1839 1839
 *
1840 1840
 * @param[in,out] shell           Pointer to the shell object to be initialized.
1841
 * @param[in]     name            Name of the shell thread (may be NULL).
1841 1842
 * @param[in]     prompt          Prompt line to print (NULL = use default prompt).
1842 1843
 * @param[in]     inbuf           Two dimensional input buffer.
1843 1844
 * @param[in]     entries         Number of entries in the input buffer (1st dimension).
1844 1845
 * @param[in]     linewidth       Length of each entry in the input buffer (2nd dimension).
1845 1846
 * @param[in]     numargs         Maximum number of arguments (defines size of internal buffer).
1846 1847
 */
1847
void aosShellInit(aos_shell_t* shell, const char* prompt, char inbuf[], size_t entries, size_t linewidth, size_t numargs)
1848
void aosShellInit(aos_shell_t* shell, const char* name, const char* prompt, char inbuf[], size_t entries, size_t linewidth, size_t numargs)
1848 1849
{
1849 1850
  aosDbgCheck(shell != NULL);
1850 1851
  aosDbgCheck(inbuf != NULL);
......
1854 1855

  
1855 1856
  // set parameters
1856 1857
  shell->thread = NULL;
1858
#if (CH_CFG_USE_REGISTRY == TRUE)
1859
  shell->name = name;
1860
#else /* (CH_CFG_USE_REGISTRY == TRUE) */
1861
  (void)name;
1862
#endif /* (CH_CFG_USE_REGISTRY == TRUE) */
1857 1863
  chEvtObjectInit(&shell->eventSource);
1858 1864
  aosShellStreamInit(&shell->stream);
1859 1865
  shell->prompt = prompt;
......
2179 2185
  aos_shellcommand_t* cmd;
2180 2186

  
2181 2187
  // initialize variables and buffers
2188
#if (CH_CFG_USE_REGISTRY == TRUE)
2189
  currp->name = ((aos_shell_t*)shell)->name;
2190
#endif /* (CH_CFG_USE_REGISTRY == TRUE) */
2182 2191
  rdata.input.length = 0;
2183 2192
  rdata.input.cursorpos = 0;
2184 2193
  memset(rdata.input.escseq, '\0', AOS_SHELL_ESCSEQUENCE_LENGTH * sizeof(char));
core/src/aos_system.c
88 88
static int _shellcmd_configcb(BaseSequentialStream* stream, int argc, char* argv[]);
89 89
static int _shellcmd_infocb(BaseSequentialStream* stream, int argc, char* argv[]);
90 90
static int _shellcmd_shutdowncb(BaseSequentialStream* stream, int argc, char* argv[]);
91
#if ((CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE)) || defined(__DOXYGEN__)
92
static int _shellcmd_cpuloadcb(BaseSequentialStream* stream, int argc, char* argv[]);
93
#endif /* (CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE) */
91 94
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
92 95
static int _shellcmd_kerneltestcb(BaseSequentialStream* stream, int argc, char* argv[]);
93 96
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
......
111 114
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__)
112 115

  
113 116
/**
117
 * @brief   System shell name.
118
 */
119
static const char _shell_name[] = "system shell";
120

  
121
/**
114 122
 * @brief   Shell thread working area.
115 123
 */
116 124
static THD_WORKING_AREA(_shell_wa, AMIROOS_CFG_SHELL_STACKSIZE);
......
139 147
static AOS_SHELL_COMMAND(_shellcmd_shutdown, "module:shutdown", _shellcmd_shutdowncb);
140 148
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */
141 149

  
150
#if ((CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE)) || defined(__DOXYGEN__)
151

  
152
/**
153
 * @brief   Shell command to read out CPU load.
154
 */
155
static AOS_SHELL_COMMAND(_shellcmd_cpuload, "module:cpuload", _shellcmd_cpuloadcb);
156

  
157
#endif /* (CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE) */
158

  
142 159
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
143 160

  
144 161
/**
145
 * @brief   Shell kommand to run a test of the ChibiOS/RT kernel.
162
 * @brief   Shell command to run a test of the ChibiOS/RT kernel.
146 163
 */
147 164
static AOS_SHELL_COMMAND(_shellcmd_kerneltest, "kernel:test", _shellcmd_kerneltestcb);
148 165

  
......
238 255
  _printSystemInfoLine(stream, "Core Variant", SYSTEM_INFO_NAMEWIDTH, "%s", PORT_CORE_VARIANT_NAME);
239 256
#endif /* defined(PORT_CORE_VARIANT_NAME) */
240 257
  _printSystemInfoLine(stream, "Architecture", SYSTEM_INFO_NAMEWIDTH, "%s", PORT_ARCHITECTURE_NAME);
258
  _printSystemInfoLine(stream, "Core Frequency", SYSTEM_INFO_NAMEWIDTH, "%u MHz", SystemCoreClock / 1000000);
241 259
  _printSystemInfoSeparator(stream, '-', SYSTEM_INFO_WIDTH);
242 260
#if (AMIROOS_CFG_SSSP_ENABLE == true)
243 261
  _printSystemInfoLine(stream, "AMiRo-OS" , SYSTEM_INFO_NAMEWIDTH, "%u.%u.%u %s (SSSP %u.%u)", AMIROOS_VERSION_MAJOR, AMIROOS_VERSION_MINOR, AMIROOS_VERSION_PATCH, AMIROOS_RELEASE_TYPE, AOS_SSSP_VERSION_MAJOR, AOS_SSSP_VERSION_MINOR);
......
622 640
#endif /* (AMIROOS_CFG_BOOTLOADER == X) */
623 641
}
624 642

  
643
#if ((CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE)) || defined(__DOXYGEN__)
644

  
645
/**
646
 * @brief   Callback function for the module:cpuload shell command.
647
 *
648
 * @param[in] stream    The I/O stream to use.
649
 * @param[in] argc      Number of arguments.
650
 * @param[in] argv      List of pointers to arguments.
651
 *
652
 * @return      An exit status.
653
 */
654
static int _shellcmd_cpuloadcb(BaseSequentialStream* stream, int argc, char* argv[])
655
{
656
  aosDbgCheck(stream != NULL);
657

  
658
  (void)argc;
659
  (void)argv;
660

  
661
  // local variables
662
  rttime_t sum = 0;
663
  thread_t* thd = chRegFirstThread();
664

  
665
  // accumulate system load
666
  do {
667
    sum += thd->stats.cumulative;
668
    thd = chRegNextThread(thd);
669
  } while (thd);
670
  sum += ch.kernel_stats.m_crit_thd.cumulative + ch.kernel_stats.m_crit_isr.cumulative;
671

  
672
  // calculate and retreive cpu load per thread
673
  chprintf(stream, "threads & critical zones:\n");
674
  thd = chRegFirstThread();
675
  do {
676
    chprintf(stream, "\t%22s: %6.2f%%\n",
677
             (thd->name != NULL) ? thd->name : "<unnamed thread>",
678
             (float)thd->stats.cumulative / (float)sum * 100.f);
679
    thd = chRegNextThread(thd);
680
  } while (thd);
681
  chprintf(stream, "\t%22s: %6.2f%%\n",
682
           "thread critical zones",
683
           (float)ch.kernel_stats.m_crit_thd.cumulative / (float)sum * 100.f);
684
  chprintf(stream, "\t%22s: %6.2f%%\n",
685
           "ISR critical zones",
686
           (float)ch.kernel_stats.m_crit_isr.cumulative / (float)sum * 100.f);
687

  
688
  // retreive further real-time statistics
689
  chprintf(stream, "\nworst critical zones:\n");
690
  chprintf(stream, "\tthreads: %uus (%u clocks @ %uMHz)\n",
691
           RTC2US(SystemCoreClock, ch.kernel_stats.m_crit_thd.worst),
692
           ch.kernel_stats.m_crit_thd.worst,
693
           SystemCoreClock / 1000000);
694
  chprintf(stream, "\t   ISRs: %uus (%u clocks @ %uMHz)\n",
695
           RTC2US(SystemCoreClock, ch.kernel_stats.m_crit_isr.worst),
696
           ch.kernel_stats.m_crit_isr.worst,
697
           SystemCoreClock / 1000000);
698

  
699
  return 0;
700
}
701

  
702
#endif /* (CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE) */
703

  
625 704
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
626 705

  
627 706
/**
......
750 829

  
751 830
  /* init shell */
752 831
  aosShellInit(&aos.shell,
832
               _shell_name,
753 833
               shellPrompt,
754 834
               _shell_buffer,
755 835
               SYSTEM_SHELL_BUFFERENTRIES,
......
759 839
  aosShellAddCommand(&aos.shell, &_shellcmd_config);
760 840
  aosShellAddCommand(&aos.shell, &_shellcmd_info);
761 841
  aosShellAddCommand(&aos.shell, &_shellcmd_shutdown);
842
#if ((CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE)) || defined(__DOXYGEN__)
843
  aosShellAddCommand(&aos.shell, &_shellcmd_cpuload);
844
#endif /* (CH_CFG_USE_REGISTRY == TRUE) && (CH_DBG_STATISTICS == TRUE) */
762 845
#if (AMIROOS_CFG_TESTS_ENABLE == true)
763 846
  aosShellAddCommand(&aos.shell, &_shellcmd_kerneltest);
764 847
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
modules/aos_chconf.h
492 492
 * @note    The default is @p FALSE.
493 493
 */
494 494
#if !defined(CH_DBG_STATISTICS)
495
#if ((CH_CFG_USE_TM == TRUE) && (AMIROOS_CFG_DBG == true)) || defined(__DOXYGEN__)
495
#if ((CH_CFG_USE_TM == TRUE) && ((AMIROOS_CFG_DBG == true) || AMIROOS_CFG_PROFILE == true)) || defined(__DOXYGEN__)
496 496
  #define CH_DBG_STATISTICS                 TRUE
497 497
#else
498 498
  #define CH_DBG_STATISTICS                 FALSE

Also available in: Unified diff