File tree Expand file tree Collapse file tree 1 file changed +29
-1
lines changed
Expand file tree Collapse file tree 1 file changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -65,14 +65,42 @@ extern "C" {
6565 volatile int PRGDATA_StartMarker __attribute__ ((section (" PrgData" ), __used__));
6666}
6767
68+ /* *
69+ * @brief Generic pow function.
70+ *
71+ * @warning This function is recursive.
72+ *
73+ * @tparam T
74+ * @param base
75+ * @param exponent
76+ * @return
77+ */
78+ template <typename T>
79+ consteval T pow (const T base, const uint32_t exponent) {
80+ if (exponent == 0 ) [[unlikely]] {
81+ return 1 ;
82+ }
83+
84+ if (exponent == 1 ) [[unlikely]] {
85+ return base;
86+ }
87+
88+ if ((exponent & 1 ) == 0 ) {
89+ T rest = pow (base, exponent / 2 );
90+ return rest * rest;
91+ }
92+
93+ return base * pow (base, exponent - 1 );
94+ }
95+
6896// definition for the flash device
6997const __attribute__ ((section(" DevDscr" ), __used__)) flash_device FlashDevice = {
7098 flash_drv_version, // driver version
7199 " test device" , // device name
72100 device_type::on_chip, // device type
73101 0xA0000000 , // base address
74102 0x00000400 , // flash size
75- 4 , // page size
103+ pow ( 2 , PAGE_SIZE_SHIFT) , // page size
76104 0 , // reserved
77105 0xff , // blank value
78106 100 , // page program timeout
You can’t perform that action at this time.
0 commit comments