テスト用のあれこれ共用フォルダ
修订版 | 1926592164ce07c86b4637b6d2d96cdc43d77d9c (tree) |
---|---|
时间 | 2018-02-21 22:52:09 |
作者 | takemasa <suikan@user...> |
Commiter | takemasa |
Added new files
@@ -0,0 +1,65 @@ | ||
1 | +/* | |
2 | + * abstracttask.cpp | |
3 | + * | |
4 | + * Created on: 2018/02/20 | |
5 | + * Author: takemasa | |
6 | + */ | |
7 | + | |
8 | +#include <abstracttask.hpp> | |
9 | +#include "murasaki_assert.hpp" | |
10 | + | |
11 | +namespace murasaki { | |
12 | + | |
13 | +AbstractTask::AbstractTask(const char * task_name, unsigned short stack_depth, void * parameter, UBaseType_t priority) | |
14 | + : name_(task_name), | |
15 | + stack_depth_(stack_depth), | |
16 | + parameter_(parameter), | |
17 | + priority_(priority) | |
18 | +{ | |
19 | + MURASAKI_ASSERT(NULL!= task_name); | |
20 | + MURASAKI_ASSERT(0 == stack_depth); // reject only very explict fault. | |
21 | + task_ = 0; | |
22 | +} | |
23 | + | |
24 | +AbstractTask::~AbstractTask() | |
25 | +{ | |
26 | + vTaskDelete(task_); | |
27 | +} | |
28 | + | |
29 | +void AbstractTask::Start() | |
30 | +{ | |
31 | + BaseType_t task_result = ::xTaskCreate(AbstractTask::Launch, // task entity; | |
32 | + name_, // name of task | |
33 | + stack_depth_, // stack depth | |
34 | + this, // parameter to task | |
35 | + priority_, // execusion priority of task | |
36 | + &task_ // receive task handle | |
37 | + ); | |
38 | + MURASAKI_ASSERT(task_result != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY); | |
39 | + | |
40 | +} | |
41 | + | |
42 | +void AbstractTask::Resume() | |
43 | +{ | |
44 | + vTaskResume(task_); | |
45 | +} | |
46 | + | |
47 | +void AbstractTask::Suspend() | |
48 | +{ | |
49 | + vTaskSuspend(task_); | |
50 | +} | |
51 | + | |
52 | +const char* AbstractTask::GetName() | |
53 | +{ | |
54 | + return name_; | |
55 | +} | |
56 | + | |
57 | +void AbstractTask::Launch(void* ptr) | |
58 | +{ | |
59 | + MURASAKI_ASSERT(NULL != ptr); | |
60 | + | |
61 | + static_cast<AbstractTask *>(ptr)->TaskBody(); | |
62 | +} | |
63 | + | |
64 | + | |
65 | +} /* namespace murasaki */ |
@@ -0,0 +1,39 @@ | ||
1 | +/* | |
2 | + * abstracttask.hpp | |
3 | + * | |
4 | + * Created on: 2018/02/20 | |
5 | + * Author: takemasa | |
6 | + */ | |
7 | + | |
8 | +#ifndef ABSTRACTTASK_HPP_ | |
9 | +#define ABSTRACTTASK_HPP_ | |
10 | + | |
11 | +#include <FreeRTOS.h> | |
12 | +#include <task.h> | |
13 | + | |
14 | +namespace murasaki { | |
15 | + | |
16 | +class AbstractTask | |
17 | +{ | |
18 | + public: | |
19 | + AbstractTask() = delete; | |
20 | + AbstractTask(const char * task_name, unsigned short stack_depth, void * task_parameter, UBaseType_t task_priority); | |
21 | + virtual ~AbstractTask(); | |
22 | + void Start(); | |
23 | + void Resume(); | |
24 | + void Suspend(); | |
25 | + const char * GetName(); | |
26 | + protected: | |
27 | + TaskHandle_t task_; | |
28 | + const char * name_; | |
29 | + const unsigned short stack_depth_; | |
30 | + const void * parameter_; | |
31 | + const UBaseType_t priority_; | |
32 | + | |
33 | + static void Launch(void * ptr); | |
34 | + virtual void TaskBody() = 0; | |
35 | +}; | |
36 | + | |
37 | +} /* namespace murasaki */ | |
38 | + | |
39 | +#endif /* ABSTRACTTASK_HPP_ */ |