diff options
Diffstat (limited to 'source')
32 files changed, 167 insertions, 255 deletions
diff --git a/source/application/main/Main.cc b/source/application/main/Main.cc index e27d5b5..4b1f8f4 100644 --- a/source/application/main/Main.cc +++ b/source/application/main/Main.cc @@ -25,7 +25,7 @@ #include <cstdio> -extern void main_loop(hal_platform& platform); +extern void main_loop(); #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) __ASM(" .global __ARM_use_no_argv\n"); @@ -41,13 +41,7 @@ static void print_application_intro() int main () { - hal_platform platform; - platform_timer timer; - - /* Initialise the HAL and platform. */ - hal_init(&platform, &timer); - - if (0 == hal_platform_init(&platform)) { + if (hal_platform_init()) { /* Application information, UART should have been initialised. */ print_application_intro(); @@ -55,13 +49,13 @@ int main () PrintTensorFlowVersion(); /* Run the application. */ - main_loop(platform); + main_loop(); } /* This is unreachable without errors. */ info("program terminating...\n"); /* Release platform. */ - hal_platform_release(&platform); + hal_platform_release(); return 0; } diff --git a/source/hal/CMakeLists.txt b/source/hal/CMakeLists.txt index 37bf267..74256bb 100644 --- a/source/hal/CMakeLists.txt +++ b/source/hal/CMakeLists.txt @@ -39,7 +39,7 @@ target_include_directories(${HAL_TARGET} target_sources(${HAL_TARGET} PRIVATE source/hal.c - source/hal_timer.c) + source/hal_pmu.c) if (DEFINED VERIFY_TEST_OUTPUT) message(STATUS "Test output verification flag is: ${VERIFY_TEST_OUTPUT}") diff --git a/source/hal/include/hal.h b/source/hal/include/hal.h index 25ea1e2..5d1964d 100644 --- a/source/hal/include/hal.h +++ b/source/hal/include/hal.h @@ -29,47 +29,25 @@ extern "C" { #endif #include "platform_drivers.h" /* Platform drivers */ -#include "timer.h" /* Timer/profiler API */ +#include "hal_pmu.h" /* Timer/profiler API */ #include "hal_lcd.h" /* LCD functions */ #include <inttypes.h> #include <stdbool.h> -/* Structure to define a platform context to be used by the application */ -typedef struct hal_platform_context { - int inited; /**< initialised */ - char plat_name[64]; /**< name of this platform */ - platform_timer* timer; /**< timer */ - int (* platform_init)(); /**< pointer to platform initialisation function */ - void (* platform_release)(); /**< pointer to platform release function */ -} hal_platform; - -/** - * @brief Initialise the HAL structure based on compile time config. This - * should be called before any other function in this API. - * @param[in,out] platform Pointer to a pre-allocated platform struct. - * @param[in,out] timer Pointer to a pre-allocated timer module. - * @return 0 if successful, error code otherwise. - **/ -int hal_init(hal_platform* platform, platform_timer* timer); - - /** * @brief Initialise the HAL platform. This will go and initialise all the * modules on the platform the application requires to run. - * @param[in] platform Pointer to a pre-allocated and initialised - * platform structure. - * @return 0 if successful, error code otherwise. + * @return True if successful, false otherwise. **/ -int hal_platform_init(hal_platform* platform); +bool hal_platform_init(void); /** * @brief Release the HAL platform. This should release resources acquired. - * @param[in] platform pointer to a pre-allocated and initialised * platform structure. **/ -void hal_platform_release(hal_platform* platform); +void hal_platform_release(void); /** * @brief Gets user input from the stdin interface. diff --git a/source/hal/include/timer.h b/source/hal/include/hal_pmu.h index 9910fcf..5bfe517 100644 --- a/source/hal/include/timer.h +++ b/source/hal/include/hal_pmu.h @@ -14,23 +14,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef HAL_TIMER_H -#define HAL_TIMER_H +#ifndef HAL_PMU_H +#define HAL_PMU_H -#include "platform_drivers.h" /* Platform package API */ -#include "user_input.h" /* PMU structs and API */ +#include "platform_pmu.h" -/* Structure to hold a platform specific timer implementation */ -typedef struct _platform_timer { - int inited; /**< Initialised or not. */ - void (* reset)(void); /**< Reset the timer. */ - pmu_counters (* get_counters)(void); /**< Gets the current time counter. */ +/** + * @brief Initialise the PMU available for the platform. + **/ +void hal_pmu_init(void); -} platform_timer; +/** + * @brief Resets the counters. + */ +void hal_pmu_reset(void); /** - * @brief Initialise the timer available for the platform. + * @brief Gets the current counter values. + * @param[out] Pointer to a pmu_counters object. **/ -void init_timer(platform_timer* timer); +void hal_pmu_get_counters(pmu_counters* counters); -#endif /* HAL_TIMER_H */ +#endif /* HAL_PMU_H */ diff --git a/source/hal/source/components/npu/ethosu_profiler.c b/source/hal/source/components/npu/ethosu_profiler.c index 3ac3497..5d50b09 100644 --- a/source/hal/source/components/npu/ethosu_profiler.c +++ b/source/hal/source/components/npu/ethosu_profiler.c @@ -22,6 +22,8 @@ extern struct ethosu_driver ethosu_drv; /* Default Arm Ethos-U NPU device driver object */ static ethosu_pmu_counters npu_counters; /* NPU counter local instance */ +static const char* unit_beats = "beats"; +static const char* unit_cycles = "cycles"; /** * @brief Gets the npu counter instance to be used. @@ -59,29 +61,29 @@ void ethosu_pmu_init(void) counters->npu_evt_counters[0].event_type = ETHOSU_PMU_NPU_IDLE; counters->npu_evt_counters[0].event_mask = ETHOSU_PMU_CNT1_Msk; counters->npu_evt_counters[0].name = "NPU IDLE"; - counters->npu_evt_counters[0].unit = "cycles"; + counters->npu_evt_counters[0].unit = unit_cycles; counters->npu_evt_counters[1].event_type = ETHOSU_PMU_AXI0_RD_DATA_BEAT_RECEIVED; counters->npu_evt_counters[1].event_mask = ETHOSU_PMU_CNT2_Msk; counters->npu_evt_counters[1].name = "NPU AXI0_RD_DATA_BEAT_RECEIVED"; - counters->npu_evt_counters[1].unit = "beats"; + counters->npu_evt_counters[1].unit = unit_beats; counters->npu_evt_counters[2].event_type = ETHOSU_PMU_AXI0_WR_DATA_BEAT_WRITTEN; counters->npu_evt_counters[2].event_mask = ETHOSU_PMU_CNT3_Msk; counters->npu_evt_counters[2].name = "NPU AXI0_WR_DATA_BEAT_WRITTEN"; - counters->npu_evt_counters[2].unit = "beats"; + counters->npu_evt_counters[2].unit = unit_beats; counters->npu_evt_counters[3].event_type = ETHOSU_PMU_AXI1_RD_DATA_BEAT_RECEIVED; counters->npu_evt_counters[3].event_mask = ETHOSU_PMU_CNT4_Msk; counters->npu_evt_counters[3].name = "NPU AXI1_RD_DATA_BEAT_RECEIVED"; - counters->npu_evt_counters[3].unit = "beats"; + counters->npu_evt_counters[3].unit = unit_beats; #else /* ETHOSU_PMU_NCOUNTERS >= 4 */ #error "NPU PMU expects a minimum of 4 available event triggered counters!" #endif /* ETHOSU_PMU_NCOUNTERS >= 4 */ #if ETHOSU_DERIVED_NCOUNTERS >= 1 counters->npu_derived_counters[0].name = "NPU ACTIVE"; - counters->npu_derived_counters[0].unit = "cycles"; + counters->npu_derived_counters[0].unit = unit_cycles; #endif /* ETHOSU_DERIVED_NCOUNTERS >= 1 */ for (i = 0; i < ETHOSU_PMU_NCOUNTERS; ++i) { diff --git a/source/hal/source/components/npu/include/ethosu_profiler.h b/source/hal/source/components/npu/include/ethosu_profiler.h index ca95b19..093c07f 100644 --- a/source/hal/source/components/npu/include/ethosu_profiler.h +++ b/source/hal/source/components/npu/include/ethosu_profiler.h @@ -29,14 +29,14 @@ typedef struct npu_event_counter_ { enum ethosu_pmu_event_type event_type; uint32_t event_mask; uint32_t counter_value; - char* unit; - char* name; + const char* unit; + const char* name; } npu_evt_counter; typedef struct npu_derived_counter_ { uint32_t counter_value; - char* unit; - char* name; + const char* unit; + const char* name; } npu_derived_counter; typedef struct ethosu_pmu_counters_ { diff --git a/source/hal/source/components/platform_pmu/include/platform_pmu.h b/source/hal/source/components/platform_pmu/include/platform_pmu.h index 3724e57..b3fd8e8 100644 --- a/source/hal/source/components/platform_pmu/include/platform_pmu.h +++ b/source/hal/source/components/platform_pmu/include/platform_pmu.h @@ -50,10 +50,10 @@ typedef struct _pmu_counters { void platform_reset_counters(void); /** - * @brief Gets the current counter values. - * @returns A populated instance of pmu_counters struct. + * @brief Gets the current counter values. + * @param[out] Pointer to a pmu_counters object. **/ -pmu_counters platform_get_counters(void); +void platform_get_counters(pmu_counters* counters); #ifdef __cplusplus } diff --git a/source/hal/source/hal.c b/source/hal/source/hal.c index d6028e7..4651bfd 100644 --- a/source/hal/source/hal.c +++ b/source/hal/source/hal.c @@ -19,62 +19,29 @@ #include "platform_drivers.h" /* Platform drivers */ #include "log_macros.h" /* Logging macros */ -#include <stdio.h> -#include <assert.h> -#include <string.h> - -int hal_init(hal_platform* platform, platform_timer* timer) -{ - platform->timer = timer; - platform->platform_init = platform_init; - platform->platform_release = platform_release; - platform_name(platform->plat_name, sizeof(platform->plat_name)); - - return 0; -} - -/** - * @brief Local helper function to clean the slate for current platform. - **/ -static void hal_platform_clear(hal_platform* platform) +bool hal_platform_init(void) { - assert(platform); - platform->inited = 0; -} - -int hal_platform_init(hal_platform* platform) -{ - int state; - assert(platform && platform->platform_init); - hal_platform_clear(platform); - /* Initialise platform */ - if (0 != (state = platform->platform_init())) { - printf_err("Failed to initialise platform %s\n", platform->plat_name); - return state; + if (0 != platform_init()) { + printf_err("Failed to initialise platform %s\n", platform_name()); + return false; } /* Initialise LCD */ - if (0 != (state = hal_lcd_init())) { + if (0 != hal_lcd_init()) { printf_err("hal_lcd_init failed\n"); - return state; + return false; } - /* Initialise the timer module */ - init_timer(platform->timer); + /* Initialise PMU */ + hal_pmu_init(); - info("%s platform initialised\n", platform->plat_name); - platform->inited = !state; - return state; + return true; } -void hal_platform_release(hal_platform *platform) +void hal_platform_release(void) { - assert(platform && platform->platform_release); - - hal_platform_clear(platform); - info("Releasing platform %s\n", platform->plat_name); - platform->platform_release(); + platform_release(); } bool hal_get_user_input(char* user_input, int size) diff --git a/source/hal/source/hal_timer.c b/source/hal/source/hal_pmu.c index 0488afa..c89128d 100644 --- a/source/hal/source/hal_timer.c +++ b/source/hal/source/hal_pmu.c @@ -14,26 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "timer.h" -#include "log_macros.h" +#include "hal_pmu.h" #include "platform_drivers.h" -#include <assert.h> -#include <string.h> -#include <inttypes.h> - -/** - * @brief Initialiser for HAL timer. - * @param[in] timer Platform timer to initialize. - **/ -void init_timer(platform_timer* timer) +void hal_pmu_init(void) { - assert(timer); - memset(timer, 0, sizeof(*timer)); + platform_reset_counters(); +} - timer->reset = platform_reset_counters; - timer->get_counters = platform_get_counters; +void hal_pmu_reset(void) +{ + platform_reset_counters(); +} - timer->reset(); - timer->inited = 1; +void hal_pmu_get_counters(pmu_counters* counters) +{ + platform_get_counters(counters); } diff --git a/source/hal/source/platform/mps3/include/platform_drivers.h b/source/hal/source/platform/mps3/include/platform_drivers.h index 8b699d5..de03bcd 100644 --- a/source/hal/source/platform/mps3/include/platform_drivers.h +++ b/source/hal/source/platform/mps3/include/platform_drivers.h @@ -38,10 +38,9 @@ int platform_init(void); void platform_release(void); /** - * @brief Sets the platform name. - * @param[out] name Name of the platform to be set - * @param[in] size Size of the input buffer + * @brief Gets the platform name. + * @return Pointer to the name */ -void platform_name(char* name, size_t size); +const char* platform_name(void); #endif /* PLATFORM_DRIVERS_H */ diff --git a/source/hal/source/platform/mps3/include/timer_mps3.h b/source/hal/source/platform/mps3/include/timer_mps3.h index b370e89..dcec980 100644 --- a/source/hal/source/platform/mps3/include/timer_mps3.h +++ b/source/hal/source/platform/mps3/include/timer_mps3.h @@ -44,10 +44,10 @@ typedef struct mps3_pmu_counters_ { void platform_reset_counters(void); /** - * @brief Gets the current counter values. - * @returns A populated instance of pmu_counters struct. + * @brief Gets the current counter values. + * @param[out] Pointer to a pmu_counters object. **/ -pmu_counters platform_get_counters(void); +void platform_get_counters(pmu_counters* counters); /** * @brief Gets the MPS3 core clock diff --git a/source/hal/source/platform/mps3/source/platform_drivers.c b/source/hal/source/platform/mps3/source/platform_drivers.c index 17ccdf2..d1c3da2 100644 --- a/source/hal/source/platform/mps3/source/platform_drivers.c +++ b/source/hal/source/platform/mps3/source/platform_drivers.c @@ -48,6 +48,9 @@ */ static int verify_platform(void); +/** Platform name */ +static const char* s_platform_name = DESIGN_NAME; + int platform_init(void) { int err = 0; @@ -82,8 +85,7 @@ int platform_init(void) #endif /* ARM_NPU */ /* Print target design info */ - info("Target system design: %s\n", DESIGN_NAME); - + info("Target system design: %s\n", s_platform_name); return 0; } @@ -92,9 +94,9 @@ void platform_release(void) __disable_irq(); } -void platform_name(char* name, size_t size) +const char* platform_name(void) { - strncpy(name, DESIGN_NAME, size); + return s_platform_name; } #define CREATE_MASK(msb, lsb) (int)(((1U << ((msb) - (lsb) + 1)) - 1) << (lsb)) diff --git a/source/hal/source/platform/mps3/source/timer_mps3.c b/source/hal/source/platform/mps3/source/timer_mps3.c index 6330269..7ce3002 100644 --- a/source/hal/source/platform/mps3/source/timer_mps3.c +++ b/source/hal/source/platform/mps3/source/timer_mps3.c @@ -20,6 +20,8 @@ #include "smm_mps3.h" /* Memory map for MPS3. */ static uint64_t cpu_cycle_count = 0; /* 64-bit cpu cycle counter */ +static const char* unit_cycles = "cycles"; +static const char* unit_ms = "milliseconds"; /** * @brief Gets the system tick triggered cycle counter for the CPU. @@ -69,12 +71,10 @@ void platform_reset_counters(void) #endif /* defined (ARM_NPU) */ } -pmu_counters platform_get_counters(void) +void platform_get_counters(pmu_counters* counters) { - pmu_counters platform_counters = { - .num_counters = 0, - .initialised = true - }; + counters->num_counters = 0; + counters->initialised = true; uint32_t i = 0; #if defined (ARM_NPU) @@ -84,20 +84,20 @@ pmu_counters platform_get_counters(void) npu_counters.npu_evt_counters[i].counter_value, npu_counters.npu_evt_counters[i].name, npu_counters.npu_evt_counters[i].unit, - &platform_counters); + counters); } for (i = 0; i < ETHOSU_DERIVED_NCOUNTERS; ++i) { add_pmu_counter( npu_counters.npu_derived_counters[i].counter_value, npu_counters.npu_derived_counters[i].name, npu_counters.npu_derived_counters[i].unit, - &platform_counters); + counters); } add_pmu_counter( npu_counters.npu_total_ccnt, "NPU TOTAL", - "cycles", - &platform_counters); + unit_cycles, + counters); #endif /* defined (ARM_NPU) */ #if defined(CPU_PROFILE_ENABLED) @@ -111,14 +111,14 @@ pmu_counters platform_get_counters(void) add_pmu_counter( mps3_counters.counter_systick, "CPU TOTAL", - "cycles", - &platform_counters); + unit_cycles, + counters); add_pmu_counter( get_tstamp_milliseconds(&mps3_counters), "DURATION", - "milliseconds", - &platform_counters); + unit_ms, + counters); #endif /* defined(CPU_PROFILE_ENABLED) */ #if !defined(CPU_PROFILE_ENABLED) @@ -129,8 +129,6 @@ pmu_counters platform_get_counters(void) UNUSED(i); #endif /* !defined(ARM_NPU) */ #endif /* !defined(CPU_PROFILE_ENABLED) */ - - return platform_counters; } uint32_t get_mps3_core_clock(void) diff --git a/source/hal/source/platform/native/include/platform_drivers.h b/source/hal/source/platform/native/include/platform_drivers.h index a203618..50164db 100644 --- a/source/hal/source/platform/native/include/platform_drivers.h +++ b/source/hal/source/platform/native/include/platform_drivers.h @@ -35,10 +35,9 @@ int platform_init(void); void platform_release(void); /** - * @brief Sets the platform name. - * @param[out] name Name of the platform to be set - * @param[in] size Size of the input buffer + * @brief Gets the platform name. + * @return Pointer to the name */ -void platform_name(char* name, size_t size); +const char* platform_name(void); #endif /* PLATFORM_DRIVERS_H */ diff --git a/source/hal/source/platform/native/include/timer_native.h b/source/hal/source/platform/native/include/timer_native.h index c8eeda2..da34b30 100644 --- a/source/hal/source/platform/native/include/timer_native.h +++ b/source/hal/source/platform/native/include/timer_native.h @@ -28,9 +28,9 @@ void platform_reset_counters(void); /** - * @brief Gets the current counter values. - * @returns A populated instance of pmu_counters struct. + * @brief Gets the current counter values. + * @param[out] Pointer to a pmu_counters object. **/ -pmu_counters platform_get_counters(void); +void platform_get_counters(pmu_counters* counters); #endif /* NATIVE_TIMER_H */ diff --git a/source/hal/source/platform/native/source/platform_drivers.c b/source/hal/source/platform/native/source/platform_drivers.c index 10db99a..d5b3727 100644 --- a/source/hal/source/platform/native/source/platform_drivers.c +++ b/source/hal/source/platform/native/source/platform_drivers.c @@ -19,6 +19,8 @@ #include <string.h> +static const char* s_platform_name = "native"; + int platform_init(void) { return 0; @@ -27,7 +29,7 @@ int platform_init(void) void platform_release(void) {} -void platform_name(char* name, size_t size) +const char* platform_name(void) { - strncpy(name, "native", size); + return s_platform_name; }
\ No newline at end of file diff --git a/source/hal/source/platform/native/source/timer_native.c b/source/hal/source/platform/native/source/timer_native.c index 590975f..7cd832c 100644 --- a/source/hal/source/platform/native/source/timer_native.c +++ b/source/hal/source/platform/native/source/timer_native.c @@ -32,25 +32,21 @@ extern "C" { void platform_reset_counters() { /* Nothing to do */ } -pmu_counters platform_get_counters(void) +void platform_get_counters(pmu_counters* counters) { struct timespec current_time; - pmu_counters platform_counters = { - .num_counters = 0, - .initialised = true - }; + counters->num_counters = 0; + counters->initialised = true; clock_gettime(1, ¤t_time); uint64_t microseconds = (current_time.tv_sec * MICROSECONDS_IN_SECOND) + (current_time.tv_nsec / NANOSECONDS_IN_MICROSECOND); #if NUM_PMU_COUNTERS > 0 - platform_counters.counters[0].value = microseconds; - platform_counters.counters[0].name = "Duration"; - platform_counters.counters[0].unit = "microseconds"; - ++platform_counters.num_counters; + counters->counters[0].value = microseconds; + counters->counters[0].name = "Duration"; + counters->counters[0].unit = "microseconds"; + ++counters->num_counters; #endif /* NUM_PMU_COUNTERS > 0 */ - - return platform_counters; } #ifdef __cplusplus diff --git a/source/hal/source/platform/simple/include/platform_drivers.h b/source/hal/source/platform/simple/include/platform_drivers.h index 31bb682..7d075e7 100644 --- a/source/hal/source/platform/simple/include/platform_drivers.h +++ b/source/hal/source/platform/simple/include/platform_drivers.h @@ -39,10 +39,9 @@ int platform_init(void); void platform_release(void); /** - * @brief Sets the platform name. - * @param[out] name Name of the platform to be set - * @param[in] size Size of the input buffer + * @brief Gets the platform name. + * @return Pointer to the name */ -void platform_name(char* name, size_t size); +const char* platform_name(void); #endif /* PLATFORM_DRIVERS_H */ diff --git a/source/hal/source/platform/simple/include/timer_simple_platform.h b/source/hal/source/platform/simple/include/timer_simple_platform.h index 40acd03..20006cc 100644 --- a/source/hal/source/platform/simple/include/timer_simple_platform.h +++ b/source/hal/source/platform/simple/include/timer_simple_platform.h @@ -31,10 +31,10 @@ void platform_reset_counters(void); /** - * @brief Gets the current counter values. - * @returns A populated instance of pmu_counters struct. + * @brief Gets the current counter values. + * @param[out] Pointer to a pmu_counters object. **/ -pmu_counters platform_get_counters(void); +void platform_get_counters(pmu_counters* counters); /** * @brief System tick interrupt handler. diff --git a/source/hal/source/platform/simple/source/platform_drivers.c b/source/hal/source/platform/simple/source/platform_drivers.c index 177ba70..3e04323 100644 --- a/source/hal/source/platform/simple/source/platform_drivers.c +++ b/source/hal/source/platform/simple/source/platform_drivers.c @@ -40,6 +40,9 @@ #endif /* ARM_NPU */ +/* Platform name */ +static const char* s_platform_name = DESIGN_NAME; + int platform_init(void) { SystemCoreClockUpdate(); /* From start up code */ @@ -72,7 +75,7 @@ int platform_init(void) #endif /* ARM_NPU */ /* Print target design info */ - info("Target system design: %s\n", DESIGN_NAME); + info("Target system design: %s\n", s_platform_name); return 0; } @@ -82,7 +85,7 @@ void platform_release(void) __disable_irq(); } -void platform_name(char* name, size_t size) +const char* platform_name(void) { - strncpy(name, DESIGN_NAME, size); + return s_platform_name; } diff --git a/source/hal/source/platform/simple/source/timer_simple_platform.c b/source/hal/source/platform/simple/source/timer_simple_platform.c index 94af308..3bb91d0 100644 --- a/source/hal/source/platform/simple/source/timer_simple_platform.c +++ b/source/hal/source/platform/simple/source/timer_simple_platform.c @@ -63,12 +63,10 @@ void platform_reset_counters(void) debug("system tick config ready\n"); } -pmu_counters platform_get_counters(void) +void platform_get_counters(pmu_counters* counters) { - pmu_counters platform_counters = { - .num_counters = 0, - .initialised = true - }; + counters->num_counters = 0; + counters->initialised = true; uint32_t i = 0; #if defined (ARM_NPU) @@ -78,20 +76,20 @@ pmu_counters platform_get_counters(void) npu_counters.npu_evt_counters[i].counter_value, npu_counters.npu_evt_counters[i].name, npu_counters.npu_evt_counters[i].unit, - &platform_counters); + counters); } for (i = 0; i < ETHOSU_DERIVED_NCOUNTERS; ++i) { add_pmu_counter( npu_counters.npu_derived_counters[i].counter_value, npu_counters.npu_derived_counters[i].name, npu_counters.npu_derived_counters[i].unit, - &platform_counters); + counters); } add_pmu_counter( npu_counters.npu_total_ccnt, "NPU TOTAL", "cycles", - &platform_counters); + counters); #endif /* defined (ARM_NPU) */ #if defined(CPU_PROFILE_ENABLED) @@ -99,7 +97,7 @@ pmu_counters platform_get_counters(void) Get_SysTick_Cycle_Count(), "CPU TOTAL", "cycles", - &platform_counters); + counters); #endif /* defined(CPU_PROFILE_ENABLED) */ #if !defined(CPU_PROFILE_ENABLED) @@ -109,8 +107,6 @@ pmu_counters platform_get_counters(void) UNUSED(i); #endif /* !defined(ARM_NPU) */ #endif /* !defined(CPU_PROFILE_ENABLED) */ - - return platform_counters; } void SysTick_Handler(void) diff --git a/source/profiler/Profiler.cc b/source/profiler/Profiler.cc index 7e10097..64edcf2 100644 --- a/source/profiler/Profiler.cc +++ b/source/profiler/Profiler.cc @@ -21,28 +21,27 @@ namespace arm { namespace app { - Profiler::Profiler(hal_platform* platform, const char* name = "Unknown") - : m_name(name) - { - if (platform && platform->inited) { - this->m_pPlatform = platform; - this->Reset(); - } else { - printf_err("Profiler %s initialised with invalid platform\n", - this->m_name.c_str()); - } - } + Profiler::Profiler() + : Profiler("Unknown") + {} + + Profiler::Profiler(const char* name) + : m_name(name) + {} bool Profiler::StartProfiling(const char* name) { if (name) { this->SetName(name); } - if (this->m_pPlatform && !this->m_started) { - this->m_pPlatform->timer->reset(); - this->m_tstampSt = this->m_pPlatform->timer->get_counters(); - this->m_started = true; - return true; + if (!this->m_started) { + hal_pmu_reset(); + this->m_tstampSt.initialised = false; + hal_pmu_get_counters(&this->m_tstampSt); + if (this->m_tstampSt.initialised) { + this->m_started = true; + return true; + } } printf_err("Failed to start profiler %s\n", this->m_name.c_str()); return false; @@ -50,13 +49,17 @@ namespace app { bool Profiler::StopProfiling() { - if (this->m_pPlatform && this->m_started) { - this->m_tstampEnd = this->m_pPlatform->timer->get_counters(); + if (this->m_started) { + this->m_tstampEnd.initialised = false; + hal_pmu_get_counters(&this->m_tstampEnd); this->m_started = false; - - this->AddProfilingUnit(this->m_tstampSt, this->m_tstampEnd, this->m_name); - - return true; + if (this->m_tstampEnd.initialised) { + this->AddProfilingUnit( + this->m_tstampSt, + this->m_tstampEnd, + this->m_name); + return true; + } } printf_err("Failed to stop profiler %s\n", this->m_name.c_str()); return false; @@ -160,11 +163,6 @@ namespace app { void Profiler::AddProfilingUnit(pmu_counters start, pmu_counters end, const std::string& name) { - if (!this->m_pPlatform) { - printf_err("Invalid platform\n"); - return; - } - struct ProfilingUnit unit = { .counters = end }; diff --git a/source/profiler/include/Profiler.hpp b/source/profiler/include/Profiler.hpp index b8f9089..581e1e5 100644 --- a/source/profiler/include/Profiler.hpp +++ b/source/profiler/include/Profiler.hpp @@ -62,13 +62,12 @@ namespace app { public: /** * @brief Constructor for profiler. - * @param[in] platform Pointer to a valid, initialised hal platform. * @param[in] name A friendly name for this profiler. **/ - Profiler(hal_platform* platform, const char* name); + Profiler(const char* name); - /** Block the default constructor. */ - Profiler() = delete; + /** Default constructor. */ + Profiler(); /** Default destructor. */ ~Profiler() = default; @@ -103,10 +102,7 @@ namespace app { ProfilingMap m_series; /* Profiling series map. */ pmu_counters m_tstampSt{}; /* Container for a current starting timestamp. */ pmu_counters m_tstampEnd{}; /* Container for a current ending timestamp. */ - hal_platform * m_pPlatform = nullptr; /* Platform pointer - to get the timer. */ - bool m_started = false; /* Indicates profiler has been started. */ - std::string m_name; /* Name given to this profiler. */ /** diff --git a/source/use_case/ad/src/MainLoop.cc b/source/use_case/ad/src/MainLoop.cc index e858320..23d1e51 100644 --- a/source/use_case/ad/src/MainLoop.cc +++ b/source/use_case/ad/src/MainLoop.cc @@ -45,7 +45,7 @@ static void DisplayMenu() } -void main_loop(hal_platform& platform) +void main_loop() { arm::app::AdModel model; /* Model wrapper object. */ @@ -59,9 +59,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "ad"}; + arm::app::Profiler profiler{"ad"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("clipIndex", 0); caseContext.Set<int>("frameLength", g_FrameLength); diff --git a/source/use_case/asr/src/MainLoop.cc b/source/use_case/asr/src/MainLoop.cc index 058211a..51b0b18 100644 --- a/source/use_case/asr/src/MainLoop.cc +++ b/source/use_case/asr/src/MainLoop.cc @@ -65,7 +65,7 @@ static uint32_t GetOutputContextLen(const arm::app::Model& model, static uint32_t GetOutputInnerLen(const arm::app::Model& model, uint32_t outputCtxLen); -void main_loop(hal_platform& platform) +void main_loop() { arm::app::Wav2LetterModel model; /* Model wrapper object. */ @@ -99,9 +99,8 @@ void main_loop(hal_platform& platform) GetLabelsVector(labels); arm::app::AsrClassifier classifier; /* Classifier wrapper object. */ - arm::app::Profiler profiler{&platform, "asr"}; + arm::app::Profiler profiler{"asr"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("clipIndex", 0); caseContext.Set<uint32_t>("frameLength", g_FrameLength); diff --git a/source/use_case/img_class/src/MainLoop.cc b/source/use_case/img_class/src/MainLoop.cc index 7b67a19..d9fb925 100644 --- a/source/use_case/img_class/src/MainLoop.cc +++ b/source/use_case/img_class/src/MainLoop.cc @@ -25,7 +25,7 @@ using ImgClassClassifier = arm::app::Classifier; -void main_loop(hal_platform& platform) +void main_loop() { arm::app::MobileNetModel model; /* Model wrapper object. */ @@ -38,9 +38,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "img_class"}; + arm::app::Profiler profiler{"img_class"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("imgIndex", 0); diff --git a/source/use_case/inference_runner/src/MainLoop.cc b/source/use_case/inference_runner/src/MainLoop.cc index cfdc520..ddff40c 100644 --- a/source/use_case/inference_runner/src/MainLoop.cc +++ b/source/use_case/inference_runner/src/MainLoop.cc @@ -26,7 +26,7 @@ enum opcodes MENU_OPT_SHOW_MODEL_INFO, /* Show model info. */ }; -void main_loop(hal_platform& platform) +void main_loop() { arm::app::TestModel model; /* Model wrapper object. */ @@ -39,10 +39,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "inference_runner"}; + arm::app::Profiler profiler{"inference_runner"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("imgIndex", 0); diff --git a/source/use_case/kws/src/MainLoop.cc b/source/use_case/kws/src/MainLoop.cc index 76dff8c..e590c4a 100644 --- a/source/use_case/kws/src/MainLoop.cc +++ b/source/use_case/kws/src/MainLoop.cc @@ -48,7 +48,7 @@ static void DisplayMenu() fflush(stdout); } -void main_loop(hal_platform& platform) +void main_loop() { arm::app::MicroNetKwsModel model; /* Model wrapper object. */ @@ -61,10 +61,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "kws"}; + arm::app::Profiler profiler{"kws"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("clipIndex", 0); caseContext.Set<int>("frameLength", g_FrameLength); diff --git a/source/use_case/kws_asr/src/MainLoop.cc b/source/use_case/kws_asr/src/MainLoop.cc index 096c966..5c1d0e0 100644 --- a/source/use_case/kws_asr/src/MainLoop.cc +++ b/source/use_case/kws_asr/src/MainLoop.cc @@ -67,7 +67,7 @@ static uint32_t GetOutputContextLen(const arm::app::Model& model, static uint32_t GetOutputInnerLen(const arm::app::Model& model, uint32_t outputCtxLen); -void main_loop(hal_platform& platform) +void main_loop() { /* Model wrapper objects. */ arm::app::MicroNetKwsModel kwsModel; @@ -104,10 +104,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "kws_asr"}; + arm::app::Profiler profiler{"kws_asr"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("kwsmodel", kwsModel); caseContext.Set<arm::app::Model&>("asrmodel", asrModel); caseContext.Set<uint32_t>("clipIndex", 0); diff --git a/source/use_case/noise_reduction/src/MainLoop.cc b/source/use_case/noise_reduction/src/MainLoop.cc index bcaff6d..5fd7823 100644 --- a/source/use_case/noise_reduction/src/MainLoop.cc +++ b/source/use_case/noise_reduction/src/MainLoop.cc @@ -56,7 +56,7 @@ static bool SetAppCtxClipIdx(arm::app::ApplicationContext& ctx, uint32_t idx) return true; } -void main_loop(hal_platform& platform) +void main_loop() { arm::app::RNNoiseModel model; /* Model wrapper object. */ @@ -71,10 +71,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "noise_reduction"}; + arm::app::Profiler profiler{"noise_reduction"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<uint32_t>("numInputFeatures", g_NumInputFeatures); caseContext.Set<uint32_t>("frameLength", g_FrameLength); caseContext.Set<uint32_t>("frameStride", g_FrameStride); diff --git a/source/use_case/object_detection/src/MainLoop.cc b/source/use_case/object_detection/src/MainLoop.cc index 0f98c8a..acfc195 100644 --- a/source/use_case/object_detection/src/MainLoop.cc +++ b/source/use_case/object_detection/src/MainLoop.cc @@ -36,7 +36,7 @@ static void DisplayDetectionMenu() fflush(stdout); } -void main_loop(hal_platform& platform) +void main_loop() { arm::app::YoloFastestModel model; /* Model wrapper object. */ @@ -49,9 +49,8 @@ void main_loop(hal_platform& platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "object_detection"}; + arm::app::Profiler profiler{"object_detection"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("imgIndex", 0); arm::app::object_detection::DetectorPostprocessing postp; diff --git a/source/use_case/vww/src/MainLoop.cc b/source/use_case/vww/src/MainLoop.cc index 03d6196..041ea18 100644 --- a/source/use_case/vww/src/MainLoop.cc +++ b/source/use_case/vww/src/MainLoop.cc @@ -25,7 +25,7 @@ using ViusalWakeWordClassifier = arm::app::Classifier; -void main_loop(hal_platform &platform) +void main_loop() { arm::app::VisualWakeWordModel model; /* Model wrapper object. */ @@ -38,9 +38,8 @@ void main_loop(hal_platform &platform) /* Instantiate application context. */ arm::app::ApplicationContext caseContext; - arm::app::Profiler profiler{&platform, "vww"}; + arm::app::Profiler profiler{"vww"}; caseContext.Set<arm::app::Profiler&>("profiler", profiler); - caseContext.Set<hal_platform&>("platform", platform); caseContext.Set<arm::app::Model&>("model", model); caseContext.Set<uint32_t>("imgIndex", 0); |