Skip to content

Commit

Permalink
feat(kernel): add Singleton
Browse files Browse the repository at this point in the history
Signed-off-by: Zone.N <[email protected]>
  • Loading branch information
MRNIU committed Jun 13, 2024
1 parent 0818bfe commit 080ed31
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 4 deletions.
6 changes: 3 additions & 3 deletions src/kernel/arch/riscv64/arch_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ uint32_t ArchInit(uint32_t argc, uint8_t *argv) {
printf("boot hart id: %d\n", argc);
printf("dtb info addr: %p\n", argv);

kKernelFdt = KernelFdt((uint64_t)argv);
kKernelFdt.getInstance() = KernelFdt((uint64_t)argv);

auto [memory_base, memory_size] = kKernelFdt.GetMemory();
auto [memory_base, memory_size] = kKernelFdt.getInstance().GetMemory();
printf("Memory address = 0x%p, size = 0x%X\n", memory_base, memory_size);

auto [serial_base, serial_size] = kKernelFdt.GetSerial();
auto [serial_base, serial_size] = kKernelFdt.getInstance().GetSerial();
auto uart = Ns16550a(serial_base);
uart.PutChar('H');
uart.PutChar('e');
Expand Down
3 changes: 2 additions & 1 deletion src/kernel/include/kernel_fdt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

#include "cstdio"
#include "cstring"
#include "singleton.hpp"

/**
* elf 文件相关
Expand Down Expand Up @@ -139,6 +140,6 @@ class KernelFdt {
};

/// 全局 elf 对象,需要在相应体系结构初始化时重新初始化
[[maybe_unused]] static KernelFdt kKernelFdt;
[[maybe_unused]] static Singleton<KernelFdt> kKernelFdt;

#endif /* SIMPLEKERNEL_SRC_KERNEL_INCLUDE_KERNEL_FDT_HPP_ */
47 changes: 47 additions & 0 deletions src/kernel/include/singleton.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

/**
* @file singleton.hpp
* @brief 单例模版
* @author Zone.N ([email protected])
* @version 1.0
* @date 2023-07-15
* @copyright MIT LICENSE
* https://github.com/Simple-XX/SimpleKernel
* @par change log:
* <table>
* <tr><th>Date<th>Author<th>Description
* <tr><td>2023-07-15<td>Zone.N ([email protected])<td>创建文件
* </table>
*/

#ifndef SIMPLEKERNEL_SRC_KERNEL_INCLUDE_SINGLETON_HPP_
#define SIMPLEKERNEL_SRC_KERNEL_INCLUDE_SINGLETON_HPP_

#include <atomic>
#include <cstddef>
#include <cstdint>

// 单例模板类
template <typename T>
class Singleton {
public:
// 获取单例实例的静态方法
static T& getInstance() {
static T instance;
return instance;
}

Singleton() = default;
~Singleton() = default;

private:
/// @name 构造/析构函数
/// @{
Singleton(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
auto operator=(const Singleton&) -> Singleton& = delete;
auto operator=(Singleton&&) -> Singleton& = delete;
/// @}
};

#endif /* SIMPLEKERNEL_SRC_KERNEL_INCLUDE_SINGLETON_HPP_ */

0 comments on commit 080ed31

Please sign in to comment.