From 5adf5a6d0bbfa36d4a757f211ae6b4a5c9e51dac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Sv=C3=A4rd?= Date: Wed, 9 Feb 2022 16:42:10 +0100 Subject: Break out the Crc class to its own library Change-Id: Iefa21223b9157e25e11f88873541b39292d12872 --- applications/inference_process/CMakeLists.txt | 6 +-- .../inference_process/src/inference_process.cpp | 43 ++-------------- lib/CMakeLists.txt | 7 ++- lib/crc/CMakeLists.txt | 20 ++++++++ lib/crc/include/crc.hpp | 59 ++++++++++++++++++++++ 5 files changed, 90 insertions(+), 45 deletions(-) create mode 100644 lib/crc/CMakeLists.txt create mode 100644 lib/crc/include/crc.hpp diff --git a/applications/inference_process/CMakeLists.txt b/applications/inference_process/CMakeLists.txt index 19777fd..9afe34a 100644 --- a/applications/inference_process/CMakeLists.txt +++ b/applications/inference_process/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 Arm Limited. All rights reserved. +# Copyright (c) 2019-2022 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # @@ -23,7 +23,7 @@ add_library(inference_process STATIC) target_include_directories(inference_process PUBLIC include PRIVATE ${TENSORFLOW_PATH} ${TENSORFLOW_PATH}/tensorflow/lite/micro/tools/make/downloads/flatbuffers/include) -target_link_libraries(inference_process PRIVATE tflu cmsis_core cmsis_device) +target_link_libraries(inference_process PRIVATE tflu cmsis_core cmsis_device ethosu_crc) if (TARGET layer_by_layer_profiler) target_link_libraries(inference_process PRIVATE layer_by_layer_profiler) endif() @@ -34,4 +34,4 @@ if (TARGET ethosu_log) target_link_libraries(inference_process PRIVATE ethosu_log) endif() -target_sources(inference_process PRIVATE src/inference_process.cpp) \ No newline at end of file +target_sources(inference_process PRIVATE src/inference_process.cpp) diff --git a/applications/inference_process/src/inference_process.cpp b/applications/inference_process/src/inference_process.cpp index 4ab0353..c877d45 100644 --- a/applications/inference_process/src/inference_process.cpp +++ b/applications/inference_process/src/inference_process.cpp @@ -27,6 +27,9 @@ #ifdef LAYER_BY_LAYER_PROFILER #include "layer_by_layer_profiler.hpp" #endif + +#include "crc.hpp" + #include "ethosu_log.h" #include "inference_process.hpp" @@ -37,46 +40,6 @@ using namespace std; -namespace { - -class Crc { -public: - constexpr Crc() : table() { - uint32_t poly = 0xedb88320; - - for (uint32_t i = 0; i < 256; i++) { - uint32_t crc = i; - - for (int j = 0; j < 8; j++) { - if (crc & 1) { - crc = poly ^ (crc >> 1); - } else { - crc >>= 1; - } - } - - table[i] = crc; - } - } - - uint32_t crc32(const void *data, const size_t length, uint32_t init = 0) const { - uint32_t crc = init ^ 0xffffffff; - - const uint8_t *v = static_cast(data); - - for (size_t i = 0; i < length; i++) { - crc = table[(crc ^ v[i]) & 0xff] ^ (crc >> 8); - } - - return crc ^ 0xffffffff; - } - -private: - uint32_t table[256]; -}; - -} // namespace - namespace InferenceProcess { DataPtr::DataPtr(void *_data, size_t _size) : data(_data), size(_size) {} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 7e47499..06e660b 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 Arm Limited. All rights reserved. +# Copyright (c) 2021-2022 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # @@ -26,4 +26,7 @@ add_subdirectory(arm_profiler) add_subdirectory(ethosu_monitor) # Build ethosu_logging -add_subdirectory(ethosu_log) \ No newline at end of file +add_subdirectory(ethosu_log) + +# Build crc lib +add_subdirectory(crc) diff --git a/lib/crc/CMakeLists.txt b/lib/crc/CMakeLists.txt new file mode 100644 index 0000000..2ee993d --- /dev/null +++ b/lib/crc/CMakeLists.txt @@ -0,0 +1,20 @@ +# +# Copyright (c) 2022 Arm Limited. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the License); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +add_library(ethosu_crc INTERFACE) +target_include_directories(ethosu_crc INTERFACE include) diff --git a/lib/crc/include/crc.hpp b/lib/crc/include/crc.hpp new file mode 100644 index 0000000..ecc5ace --- /dev/null +++ b/lib/crc/include/crc.hpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +namespace { + +class Crc { +public: + constexpr Crc() : table() { + uint32_t poly = 0xedb88320; + + for (uint32_t i = 0; i < 256; i++) { + uint32_t crc = i; + + for (int j = 0; j < 8; j++) { + if (crc & 1) { + crc = poly ^ (crc >> 1); + } else { + crc >>= 1; + } + } + + table[i] = crc; + } + } + + uint32_t crc32(const void *data, const size_t length, uint32_t init = 0) const { + uint32_t crc = init ^ 0xffffffff; + + const uint8_t *v = static_cast(data); + + for (size_t i = 0; i < length; i++) { + crc = table[(crc ^ v[i]) & 0xff] ^ (crc >> 8); + } + + return crc ^ 0xffffffff; + } + +private: + uint32_t table[256]; +}; +} // namespace -- cgit v1.2.1