Skip to content

Commit 976f107

Browse files
committed
Compile BBShiftString pru code at build time for slightly faster startup
1 parent 706cb67 commit 976f107

File tree

3 files changed

+37
-44
lines changed

3 files changed

+37
-44
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ src/fsequtils.zip
3737
src/libjson*.dylib
3838
src/non-gpl/FalconV5Support/FalconV5PRUListener_pru0.out
3939
src/non-gpl/BBShiftPanel/BBShiftPanel.out
40+
src/non-gpl/BBShiftString/BBShiftString_pru0.out
41+
src/non-gpl/BBShiftString/BBShiftString_pru1.out
4042
cscope.out
4143
docs/samples/eeproms/*.bin
4244
etc/apache2.csp

src/makefiles/libfpp-co-BBShiftString.mk

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ifeq ($(ISBEAGLEBONE), 1)
44
OBJECTS_fpp_co_BBShiftString_so += non-gpl/BBShiftString/BBShiftString.o
55
LIBS_fpp_co_BBShiftString_so += -L. -lfpp -ljsoncpp -lfpp_capeutils -lfpp-FalconV5Support -Wl,-rpath=$(SRCDIR):.
66

7-
TARGETS += libfpp-co-BBShiftString.$(SHLIB_EXT)
7+
TARGETS += libfpp-co-BBShiftString.$(SHLIB_EXT) non-gpl/BBShiftString/BBShiftString_pru0.out non-gpl/BBShiftString/BBShiftString_pru1.out
88
OBJECTS_ALL+=$(OBJECTS_fpp_co_BBShiftString_so)
99

1010
CXXFLAGS_non-gpl/BBShiftString/BBShiftString.o+=-Wno-address-of-packed-member
@@ -13,4 +13,35 @@ libfpp-co-BBShiftString.$(SHLIB_EXT): $(OBJECTS_fpp_co_BBShiftString_so) libfpp.
1313
$(CCACHE) $(CC) -shared $(CFLAGS_$@) $(OBJECTS_fpp_co_BBShiftString_so) $(LIBS_fpp_co_BBShiftString_so) $(LDFLAGS) $(LDFLAGS_fpp_co_BBShiftString_so) -o $@
1414

1515

16+
17+
18+
ifeq '$(ARMV)' 'aarch64'
19+
non-gpl/BBShiftString/BBShiftString_pru1.out: non-gpl/BBShiftString/BBShiftString.asm
20+
/usr/bin/cpp -P -I/opt/fpp/src/pru -DAM62X -DRUNNING_ON_PRU1 "/opt/fpp/src/non-gpl/BBShiftString/BBShiftString.asm" > "/tmp/BBShiftString.asm"
21+
clpru -v3 -o -DAM62X -DRUNNING_ON_PRU1 --endian=little --hardware_mac=on --obj_directory /tmp "/tmp/BBShiftString.asm"
22+
clpru -v3 -DAM62X -z /opt/fpp/src/pru/AM62x_PRU0.cmd -o "non-gpl/BBShiftString/BBShiftString_pru1.out" "/tmp/BBShiftString.obj" -i/usr/share/ti/cgt-pru/lib -i/usr/share/ti/cgt-pru/include --library=libc.a
23+
@rm "/tmp/BBShiftString.asm" "/tmp/BBShiftString.obj"
24+
25+
non-gpl/BBShiftString/BBShiftString_pru0.out: non-gpl/BBShiftString/BBShiftString.asm
26+
/usr/bin/cpp -P -I/opt/fpp/src/pru -DAM62X -DRUNNING_ON_PRU0 "/opt/fpp/src/non-gpl/BBShiftString/BBShiftString.asm" > "/tmp/BBShiftString.asm"
27+
clpru -v3 -o -DAM62X -DRUNNING_ON_PRU0 --endian=little --hardware_mac=on --obj_directory /tmp "/tmp/BBShiftString.asm"
28+
clpru -v3 -DAM62X -z /opt/fpp/src/pru/AM62x_PRU0.cmd -o "non-gpl/BBShiftString/BBShiftString_pru0.out" "/tmp/BBShiftString.obj" -i/usr/share/ti/cgt-pru/lib -i/usr/share/ti/cgt-pru/include --library=libc.a
29+
@rm "/tmp/BBShiftString.asm" "/tmp/BBShiftString.obj"
30+
31+
else
32+
33+
non-gpl/BBShiftString/BBShiftString_pru1.out: non-gpl/BBShiftString/BBShiftString.asm
34+
/usr/bin/cpp -P -I/opt/fpp/src/pru -DAM33XX -DRUNNING_ON_PRU1 "/opt/fpp/src/non-gpl/BBShiftString/BBShiftString.asm" > "/tmp/BBShiftString.asm"
35+
clpru -v3 -c --obj_directory /tmp -DAM33XX -DRUNNING_ON_PRU1 /tmp/BBShiftString.asm"
36+
clpru -v3 -z --entry_point main pru/AM335x_PRU.cmd -o "non-gpl/BBShiftString/BBShiftString_pru1.out" "/tmp/BBShiftString.obj"
37+
@rm "/tmp/BBShiftString.asm" "/tmp/BBShiftString.obj"
38+
39+
non-gpl/BBShiftString/BBShiftString_pru0.out: non-gpl/BBShiftString/BBShiftString.asm
40+
/usr/bin/cpp -P -I/opt/fpp/src/pru -DAM33XX -DRUNNING_ON_PRU0 "/opt/fpp/src/non-gpl/BBShiftString/BBShiftString.asm" > "/tmp/BBShiftString.asm"
41+
clpru -v3 -c --obj_directory /tmp -DAM33XX -DRUNNING_ON_PRU0 /tmp/BBShiftString.asm"
42+
clpru -v3 -z --entry_point main pru/AM335x_PRU.cmd -o "non-gpl/BBShiftString/BBShiftString_pru0.out" "/tmp/BBShiftString.obj"
43+
@rm "/tmp/BBShiftString.asm" "/tmp/BBShiftString.obj"
44+
endif
45+
46+
1647
endif

src/non-gpl/BBShiftString/BBShiftString.cpp

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -87,35 +87,6 @@ BBShiftStringOutput::~BBShiftStringOutput() {
8787
}
8888
}
8989

90-
static void compilePRUCode(const char* program, const std::string& pru, const std::vector<std::string>& sargs, const std::vector<std::string>& args1) {
91-
std::string log;
92-
93-
char* args[sargs.size() + 4 + args1.size()];
94-
int idx = 0;
95-
args[idx++] = (char*)"/bin/bash";
96-
args[idx++] = (char*)program;
97-
args[idx++] = (char*)pru.c_str();
98-
log = args[1];
99-
log += " " + pru;
100-
for (int x = 0; x < sargs.size(); x++) {
101-
args[idx++] = (char*)sargs[x].c_str();
102-
log += " " + sargs[x];
103-
}
104-
for (int x = 0; x < args1.size(); x++) {
105-
args[idx++] = (char*)args1[x].c_str();
106-
log += " " + args1[x];
107-
}
108-
args[idx] = NULL;
109-
LogDebug(VB_CHANNELOUT, "BBShiftStringOutput::compilePRUCode() args: %s\n", log.c_str());
110-
111-
pid_t compilePid = fork();
112-
if (compilePid == 0) {
113-
execvp("/bin/bash", args);
114-
} else {
115-
wait(NULL);
116-
}
117-
}
118-
11990
void BBShiftStringOutput::createOutputLengths(FrameData& d, const std::string& pfx) {
12091
union {
12192
uint16_t r[2];
@@ -252,12 +223,6 @@ int BBShiftStringOutput::Init(Json::Value config) {
252223
return 1;
253224
}
254225

255-
std::vector<std::string> args;
256-
std::vector<std::string> split0args;
257-
std::vector<std::string> split1args;
258-
split0args.push_back("-DRUNNING_ON_PRU0");
259-
split1args.push_back("-DRUNNING_ON_PRU1");
260-
261226
m_licensedOutputs = CapeUtils::INSTANCE.getLicensedOutputs();
262227

263228
config["base"] = root;
@@ -307,12 +272,7 @@ int BBShiftStringOutput::Init(Json::Value config) {
307272
// pru1 controls the reading mux pins so it has to output more pixels than pru0 so it knows pru0 is done
308273
m_pru1.maxStringLen = m_pru0.maxStringLen + 1;
309274
}
310-
if (m_pru0.maxStringLen) {
311-
compilePRUCode("/opt/fpp/src/non-gpl/BBShiftString/compileBBShiftString.sh", "0", args, split0args);
312-
}
313-
if (m_pru1.maxStringLen) {
314-
compilePRUCode("/opt/fpp/src/non-gpl/BBShiftString/compileBBShiftString.sh", "1", args, split1args);
315-
}
275+
316276
if (!StartPRU()) {
317277
return 0;
318278
}
@@ -359,7 +319,7 @@ int BBShiftStringOutput::StartPRU() {
359319
m_pru1.pru = new BBBPru(1, true, true);
360320
m_pru1.pruData = (BBShiftStringData*)m_pru1.pru->data_ram;
361321

362-
m_pru1.pru->run("/tmp/BBShiftString_pru1.out");
322+
m_pru1.pru->run("/opt/fpp/src/non-gpl/BBShiftString/BBShiftString_pru1.out");
363323

364324
createOutputLengths(m_pru1, "pru1");
365325
std::this_thread::sleep_for(std::chrono::milliseconds(10));
@@ -370,7 +330,7 @@ int BBShiftStringOutput::StartPRU() {
370330
}
371331
m_pru0.pru = new BBBPru(0, true, true);
372332
m_pru0.pruData = (BBShiftStringData*)m_pru0.pru->data_ram;
373-
m_pru0.pru->run("/tmp/BBShiftString_pru0.out");
333+
m_pru1.pru->run("/opt/fpp/src/non-gpl/BBShiftString/BBShiftString_pru0.out");
374334
createOutputLengths(m_pru0, "pru0");
375335
}
376336
return 1;

0 commit comments

Comments
 (0)