Skip to content

Commit f6b0ad7

Browse files
committed
[driver] iwr6843aop class member buffers to reduce stack usage
1 parent 0c590b9 commit f6b0ad7

File tree

4 files changed

+22
-20
lines changed

4 files changed

+22
-20
lines changed

examples/nucleo_h723zg/iwr6843aop/main.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ using DataRx = GpioC11;
2626
using RadarNrst = GpioC9;
2727

2828
using Radar = modm::Iwr6843aop<ControlUart, DataUart>;
29-
static Radar radar;
29+
Radar radar;
30+
Radar::FrameType radarFrame{};
3031

3132
static constexpr char RadarConfiguration[] = R"cfg(
3233
sensorStop
@@ -95,7 +96,6 @@ main()
9596

9697
MODM_LOG_INFO << "Configuration successful\n";
9798

98-
Radar::FrameType frame{};
9999
modm::Timestamp lastFrameTimestamp{};
100100
bool hasLastFrameTimestamp{false};
101101
uint32_t processedFrames{0};
@@ -110,35 +110,35 @@ main()
110110
modm::delay(5ms);
111111
}
112112

113-
while (radar.getFrame(frame))
113+
while (radar.getFrame(radarFrame))
114114
{
115115
processedFrames++;
116116
LedGreen::toggle();
117117

118118
const auto now = modm::Clock::now();
119-
const auto age = now - frame.timestamp;
119+
const auto age = now - radarFrame.timestamp;
120120

121121
uint32_t intervalMs{0};
122122
if (hasLastFrameTimestamp)
123123
{
124-
intervalMs = (frame.timestamp - lastFrameTimestamp).count();
124+
intervalMs = (radarFrame.timestamp - lastFrameTimestamp).count();
125125
}
126-
lastFrameTimestamp = frame.timestamp;
126+
lastFrameTimestamp = radarFrame.timestamp;
127127
hasLastFrameTimestamp = true;
128128

129129
float maxVelocity{0.f};
130-
for (std::size_t ii = 0; ii < frame.pointCount; ++ii)
130+
for (std::size_t ii = 0; ii < radarFrame.pointCount; ++ii)
131131
{
132-
float velocity = frame.points[ii].point.velocity;
132+
float velocity = radarFrame.points[ii].point.velocity;
133133
if (velocity < 0.f) { velocity = -velocity; }
134134
if (velocity > maxVelocity) { maxVelocity = velocity; }
135135
}
136136

137137
MODM_LOG_INFO.printf(
138138
"Frame #%lu: %lu points detected, age: %lu ms, interval: %lu ms, max velocity: "
139139
"%.2f m/s\n",
140-
static_cast<unsigned long>(frame.frameHeader.frameNumber),
141-
static_cast<unsigned long>(frame.pointCount),
140+
static_cast<unsigned long>(radarFrame.frameHeader.frameNumber),
141+
static_cast<unsigned long>(radarFrame.pointCount),
142142
static_cast<unsigned long>(age.count()), static_cast<unsigned long>(intervalMs),
143143
static_cast<double>(maxVelocity));
144144

examples/nucleo_h723zg/iwr6843aop/project.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<extends>modm:nucleo-h723zg</extends>
33
<options>
44
<option name="modm:build:build.path">../../../build/nucleo_h723zg/iwr6843aop</option>
5-
<option name="modm:platform:cortex-m:main_stack_size">16Ki</option>
65
</options>
76
<modules>
87
<module>modm:build:scons</module>

src/modm/driver/radar/iwr6843aop.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,11 @@ class Iwr6843aop : public iwr6843aop
322322

323323
Error lastError_{Error::None};
324324

325+
std::array<char, MaxConfigLineLength> configCommandBuffer_{};
326+
std::array<char, MaxResponseLineLength> responseLineBuffer_{};
327+
std::array<uint8_t, DataReadChunkSize> dataReadChunk_{};
328+
FrameType parserFrame_{};
329+
325330
std::array<uint8_t, MaxParserBufferSize> parserBuffer_{};
326331
std::size_t parserSize_{0};
327332

src/modm/driver/radar/iwr6843aop_impl.hpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ bool
7474
Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
7575
MaxParserBufferSize>::configure(std::span<const char> configuration)
7676
{
77-
std::array<char, MaxConfigLineLength> command{};
77+
auto &command = configCommandBuffer_;
7878
std::size_t commandLength{0};
7979

8080
auto executeCommand = [&](std::size_t length) -> bool {
@@ -176,7 +176,7 @@ bool
176176
Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
177177
MaxParserBufferSize>::waitForCommandResponse(bool verifyDone, CommandResponse *response)
178178
{
179-
std::array<char, MaxResponseLineLength> currentLine{};
179+
auto &currentLine = responseLineBuffer_;
180180
std::size_t currentLineLength{0};
181181

182182
bool seenDone{false};
@@ -254,13 +254,12 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
254254
{
255255
maybeTriggerSyncPulse();
256256

257-
std::array<uint8_t, DataReadChunkSize> chunk{};
258257
while (true)
259258
{
260-
const auto bytesRead = DataUart::read(chunk.data(), chunk.size());
259+
const auto bytesRead = DataUart::read(dataReadChunk_.data(), dataReadChunk_.size());
261260
if (bytesRead == 0) { break; }
262261

263-
if (not appendData(chunk.data(), bytesRead)) { return false; }
262+
if (not appendData(dataReadChunk_.data(), bytesRead)) { return false; }
264263
}
265264

266265
if (DataUart::hasError())
@@ -457,8 +456,7 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
457456

458457
if (parserSize_ < totalPacketLength) { return true; }
459458

460-
FrameType frame{};
461-
if (not parsePacket(parserBuffer_.data(), totalPacketLength, frame))
459+
if (not parsePacket(parserBuffer_.data(), totalPacketLength, parserFrame_))
462460
{
463461
setError(Error::ParseError);
464462
if (not registerParseError()) { return false; }
@@ -467,7 +465,7 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
467465
}
468466

469467
consecutiveParseErrorCount_ = 0;
470-
enqueueFrame(frame);
468+
enqueueFrame(parserFrame_);
471469
dropBytes(totalPacketLength);
472470
}
473471
}
@@ -764,4 +762,4 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
764762
return value;
765763
}
766764

767-
} // namespace modm
765+
} // namespace modm

0 commit comments

Comments
 (0)