strat: statically allocate additional threads
This commit is contained in:
@@ -32,8 +32,9 @@ extern "C" {
|
||||
|
||||
u32 __nx_applet_type = AppletType_None;
|
||||
u32 __nx_fs_num_sessions = 1;
|
||||
u32 __nx_fsdev_direntry_cache_size = 1;
|
||||
|
||||
#define INNER_HEAP_SIZE 0x2A0000
|
||||
#define INNER_HEAP_SIZE 0x240000
|
||||
size_t nx_inner_heap_size = INNER_HEAP_SIZE;
|
||||
char nx_inner_heap[INNER_HEAP_SIZE];
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace sts::fatal::srv {
|
||||
public:
|
||||
TaskThread() { /* ... */ }
|
||||
void StartTask(ITask *task) {
|
||||
R_ASSERT(this->thread.Initialize(&RunTaskImpl, task, task->GetStackSize(), TaskThreadPriority));
|
||||
R_ASSERT(this->thread.Initialize(&RunTaskImpl, task, task->GetStack(), task->GetStackSize(), TaskThreadPriority));
|
||||
R_ASSERT(this->thread.Start());
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
namespace sts::fatal::srv {
|
||||
|
||||
class ITask {
|
||||
public:
|
||||
static constexpr size_t DefaultStackSize = 0x1000;
|
||||
protected:
|
||||
const ThrowContext *context = nullptr;
|
||||
public:
|
||||
@@ -32,14 +30,30 @@ namespace sts::fatal::srv {
|
||||
}
|
||||
|
||||
virtual Result Run() = 0;
|
||||
|
||||
virtual const char *GetName() const = 0;
|
||||
virtual u8 *GetStack() = 0;
|
||||
virtual size_t GetStackSize() const = 0;
|
||||
};
|
||||
|
||||
virtual size_t GetStackSize() const {
|
||||
return DefaultStackSize;
|
||||
template<size_t _StackSize>
|
||||
class ITaskWithStack : public ITask {
|
||||
public:
|
||||
static constexpr size_t StackSize = _StackSize;
|
||||
static_assert(util::IsAligned(StackSize, 0x1000), "StackSize alignment");
|
||||
protected:
|
||||
alignas(0x1000) u8 stack_mem[StackSize] = {};
|
||||
public:
|
||||
virtual u8 *GetStack() override final {
|
||||
return this->stack_mem;
|
||||
}
|
||||
|
||||
virtual size_t GetStackSize() const override final {
|
||||
return StackSize;
|
||||
}
|
||||
};
|
||||
|
||||
using ITaskWithDefaultStack = ITaskWithStack<0x2000>;
|
||||
|
||||
void RunTasks(const ThrowContext *ctx);
|
||||
|
||||
}
|
||||
@@ -22,7 +22,7 @@ namespace sts::fatal::srv {
|
||||
namespace {
|
||||
|
||||
/* Task definition. */
|
||||
class AdjustClockTask : public ITask {
|
||||
class AdjustClockTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
Result AdjustClockForModule(PcvModule module, u32 hz);
|
||||
Result AdjustClock();
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace sts::fatal::srv {
|
||||
}
|
||||
|
||||
/* Task definition. */
|
||||
class ErrorReportTask : public ITask {
|
||||
class ErrorReportTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
void SaveReportToSdCard();
|
||||
public:
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace sts::fatal::srv {
|
||||
namespace {
|
||||
|
||||
/* Task types. */
|
||||
class PowerControlTask : public ITask {
|
||||
class PowerControlTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
bool TryShutdown();
|
||||
void MonitorBatteryState();
|
||||
@@ -33,7 +33,7 @@ namespace sts::fatal::srv {
|
||||
}
|
||||
};
|
||||
|
||||
class PowerButtonObserveTask : public ITask {
|
||||
class PowerButtonObserveTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
void WaitForPowerButton();
|
||||
public:
|
||||
@@ -43,7 +43,7 @@ namespace sts::fatal::srv {
|
||||
}
|
||||
};
|
||||
|
||||
class StateTransitionStopTask : public ITask {
|
||||
class StateTransitionStopTask : public ITaskWithDefaultStack {
|
||||
public:
|
||||
virtual Result Run() override;
|
||||
virtual const char *GetName() const override {
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace sts::fatal::srv {
|
||||
}
|
||||
|
||||
/* Task definitions. */
|
||||
class ShowFatalTask : public ITask {
|
||||
class ShowFatalTask : public ITaskWithStack<0x8000> {
|
||||
private:
|
||||
ViDisplay display;
|
||||
ViLayer layer;
|
||||
@@ -69,12 +69,9 @@ namespace sts::fatal::srv {
|
||||
virtual const char *GetName() const override {
|
||||
return "ShowFatal";
|
||||
}
|
||||
virtual size_t GetStackSize() const override {
|
||||
return 0x8000;
|
||||
}
|
||||
};
|
||||
|
||||
class BacklightControlTask : public ITask {
|
||||
class BacklightControlTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
void TurnOnBacklight();
|
||||
public:
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace sts::fatal::srv {
|
||||
namespace {
|
||||
|
||||
/* Task definition. */
|
||||
class StopSoundTask : public ITask {
|
||||
class StopSoundTask : public ITaskWithDefaultStack {
|
||||
private:
|
||||
void StopSound();
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user