Skip to content

Commit 8dadcbd

Browse files
committed
improved momory allocation, cmake installers
1 parent 9e6e9ca commit 8dadcbd

File tree

8 files changed

+139
-15
lines changed

8 files changed

+139
-15
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
set(teensy_sampleflashloader_VERSION "@teensy_sampleflashloader_VERSION@")
2+
set(teensy_sampleflashloader_LIBS teensy_sampleflashloader -L@LIB_INSTALL_DIR@)
3+
4+
@PACKAGE_INIT@
5+
6+
set_and_check(teensy_sampleflashloader_INCLUDE_DIR "@INCLUDE_INSTALL_DIR@")
7+
set_and_check(teensy_sampleflashloader_DIR "@LIB_INSTALL_DIR@")
8+
9+
check_required_components(teensy_sampleflashloader)

cmake/uninstall.cmake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
set(MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt")
2+
3+
if(NOT EXISTS ${MANIFEST})
4+
message(FATAL_ERROR "Cannot find install manifest: '${MANIFEST}'")
5+
endif()
6+
7+
file(STRINGS ${MANIFEST} files)
8+
foreach(file ${files})
9+
if(EXISTS ${file})
10+
message(STATUS "Removing file: '${file}'")
11+
12+
exec_program(
13+
${CMAKE_COMMAND} ARGS "-E remove ${file}"
14+
OUTPUT_VARIABLE stdout
15+
RETURN_VALUE result
16+
)
17+
18+
if(NOT "${result}" STREQUAL 0)
19+
message(FATAL_ERROR "Failed to remove file: '${file}'.")
20+
endif()
21+
else()
22+
MESSAGE(STATUS "File '${file}' does not exist.")
23+
endif()
24+
endforeach(file)

examples/loadsample/CMakeLists.txt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
cmake_minimum_required(VERSION 3.5)
22
project(example_loadsample)
33

4-
teensy_include_directories(../../src)
5-
teensy_add_executable(loadsample loadsample.cpp)
6-
teensy_target_link_libraries(loadsample Audio sampleflashloader TeensyVariablePlayback SD SdFat SPI SerialFlash Wire cores)
4+
5+
if (NOT DEFINED TEENSY_VERSION)
6+
set(CMAKE_CXX_STANDARD 17)
7+
8+
find_package(teensy_x86_stubs)
9+
include_directories(${teensy_x86_stubs_INCLUDE_DIR})
10+
11+
find_package(teensy_audio_x86_stubs)
12+
include_directories(${teensy_audio_x86_stubs_INCLUDE_DIR})
13+
14+
find_package(teensy_x86_sd_stubs)
15+
include_directories(${teensy_x86_sd_stubs_INCLUDE_DIR})
16+
17+
find_package(teensy_variable_playback)
18+
include_directories(${teensy_variable_playback_INCLUDE_DIR})
19+
20+
include_directories(../../src)
21+
add_executable(loadsample loadsample.cpp)
22+
else()
23+
teensy_include_directories(../../src)
24+
teensy_add_executable(loadsample loadsample.cpp)
25+
teensy_target_link_libraries(loadsample Audio sampleflashloader TeensyVariablePlayback SD SdFat SPI SerialFlash Wire cores)
26+
endif ()

src/CMakeLists.linux.cmake.in

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
message("building for linux...")
2+
add_definitions(-DBUILD_FOR_LINUX)
3+
SET(teensy_sampleflashloader_VERSION 1.0.0)
4+
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/teensy_sampleflashloader/)
5+
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib/teensy_sampleflashloader )
6+
7+
find_package(teensy_x86_stubs)
8+
include_directories(${teensy_x86_stubs_INCLUDE_DIR})
9+
10+
find_package(teensy_audio_x86_stubs)
11+
include_directories(${teensy_audio_x86_stubs_INCLUDE_DIR})
12+
13+
find_package(teensy_x86_sd_stubs)
14+
include_directories(${teensy_x86_sd_stubs_INCLUDE_DIR})
15+
16+
add_library(teensy_sampleflashloader STATIC
17+
${HEADERS}
18+
${SOURCES}
19+
)
20+
21+
set_target_properties(teensy_sampleflashloader PROPERTIES PUBLIC_HEADER "${HEADERS}")
22+
set_target_properties(teensy_sampleflashloader PROPERTIES LINKER_LANGUAGE C)
23+
24+
include(CMakePackageConfigHelpers)
25+
configure_package_config_file(../cmake/teensy_sampleflashloader.cmake.in
26+
${CMAKE_CURRENT_BINARY_DIR}/teensy_sampleflashloaderConfig.cmake
27+
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/teensy_sampleflashloader/cmake
28+
PATH_VARS)
29+
30+
write_basic_package_version_file(
31+
${CMAKE_CURRENT_BINARY_DIR}/teensy_sampleflashloaderConfigVersion.cmake
32+
VERSION ${teensy_sampleflashloader_VERSION}
33+
COMPATIBILITY SameMajorVersion )
34+
35+
install(TARGETS teensy_sampleflashloader DESTINATION
36+
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
37+
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
38+
PUBLIC_HEADER DESTINATION "include/teensy_sampleflashloader"
39+
)
40+
41+
install(FILES
42+
${CMAKE_CURRENT_BINARY_DIR}/teensy_sampleflashloaderConfig.cmake
43+
${CMAKE_CURRENT_BINARY_DIR}/teensy_sampleflashloaderConfigVersion.cmake
44+
${CMAKE_CURRENT_SOURCE_DIR}/../cmake/uninstall.cmake
45+
DESTINATION "lib/cmake/teensy_sampleflashloader" )
46+
47+
##
48+
# copied from: https://gist.github.com/royvandam/3033428
49+
# Add uninstall target
50+
# Requirements: Copy the uninstall.cmake file to the appropriate CMAKE_MODULE_PATH.
51+
add_custom_target(uninstall
52+
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake")

src/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
cmake_minimum_required(VERSION 3.5)
22
project(sampleflashloader)
33

4-
set(SOURCES flashloader.cpp dualheapasyncflashloader.cpp)
4+
set(SOURCES flashloader.cpp dualheapasyncflashloader.cpp )
55
set(HEADERS flashloader.h dualheapasyncflashloader.h audiosample.h audiochunkheap.h TeensyAudioFlashLoader.h)
66

7-
teensy_add_library(sampleflashloader ${SOURCES})
7+
if (NOT DEFINED TEENSY_VERSION)
8+
include(CMakeLists.linux.cmake.in)
9+
else()
10+
teensy_add_library(sampleflashloader ${SOURCES})
11+
endif()

src/audiochunkheap.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ namespace newdigate {
4747
audiosample *allocate(unsigned int size) {
4848
if (size < _remainder) {
4949
auto result = new audiosample();
50-
result->sampledata = (__int16_t *) (_start + _offset);
50+
#ifdef BUILD_FOR_LINUX
51+
result->sampledata = new int16_t[size];
52+
#else
53+
result->sampledata = (int16_t *) (_start + _offset);
54+
#endif
55+
5156
result->samplesize = size;
5257
result->handle = _index;
5358
_index++;

src/flashloader.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ namespace newdigate {
2525

2626
audiosample * flashloader::loadSample(const char *filename ) {
2727
Serial.printf("Reading %s\n", filename);
28-
unsigned s = ((-_lastPointer) % 512)-4;
29-
Serial.printf("Align size: %x\n", s);
30-
auto* align = (unsigned*)extmem_malloc (s);
3128

3229
File f = SD.open(filename, O_READ);
3330
if (f) {
@@ -37,11 +34,15 @@ namespace newdigate {
3734
if (f.size() < _bytes_available) {
3835
noInterrupts();
3936
uint32_t total_read = 0;
40-
auto *data = (uint32_t*)extmem_malloc( size);
41-
_lastPointer = (uint32_t)data;
37+
#ifdef BUILD_FOR_LINUX
38+
auto data = new int16_t[size/2];
39+
#else
40+
auto data = static_cast<int16_t *>(extmem_malloc(size));
41+
#endif
42+
4243
memset(data, 0, size + 4);
4344

44-
int8_t *index = (int8_t*)data + 4;
45+
auto *index = reinterpret_cast<uint8_t *>(data);
4546
while (f.available()) {
4647
size_t bytesRead = f.read(index, flashloader_default_sd_buffersize);
4748
if (bytesRead == -1)
@@ -53,12 +54,12 @@ namespace newdigate {
5354
interrupts();
5455
_bytes_available -= total_read;
5556

56-
audiosample *sample = new audiosample();
57-
sample->sampledata = (int16_t*)data;
57+
auto *sample = new audiosample();
58+
sample->sampledata = data;
5859
sample->samplesize = f.size();
5960
_samples.push_back(sample);
6061

61-
Serial.printf("\tsample start %x\n", (uint32_t)data);
62+
Serial.printf("\tsample start %x\n", data);
6263
Serial.printf("\tsample size %d\n", sample->samplesize);
6364
Serial.printf("\tavailable: %d\n", _bytes_available);
6465

@@ -84,7 +85,11 @@ namespace newdigate {
8485
if (f.size() < _bytes_available) {
8586
noInterrupts();
8687
uint32_t total_read = 0;
88+
#ifdef BUILD_FOR_LINUX
89+
auto *data = new uint32_t[size + 4];
90+
#else
8791
auto *data = (uint32_t*)extmem_malloc( size + 4);
92+
#endif
8893
memset(data, 0, size + 4);
8994
//data[0] = (01 << 24) | size; // format == 01 PCM
9095
data[0] = (0x81 << 24) | (size / 2); // format == 01 PCM

src/flashloader.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ namespace newdigate {
5353
void clearSamples() {
5454
AudioNoInterrupts();
5555
for (auto && sample : _samples){
56+
#ifdef BUILD_FOR_LINUX
57+
delete [] sample->sampledata;
58+
delete sample;
59+
#else
5660
extmem_free(sample->sampledata);
61+
#endif
5762
_bytes_available += sample->samplesize;
5863
}
5964
_samples.clear();

0 commit comments

Comments
 (0)