Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.

Commit 9328cb4

Browse files
author
Jimmy Huang
authored
Merge pull request #204 from grgustaf/static-modules
[Modules] Allocate modules statically to save RAM
2 parents 99ce842 + 408f882 commit 9328cb4

File tree

3 files changed

+64
-91
lines changed

3 files changed

+64
-91
lines changed

src/main.c

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,7 @@
2121
#include "zjs_timers.h"
2222
#include "zjs_util.h"
2323

24-
#ifndef ZJS_LINUX_BUILD
25-
// ZJS includes
26-
#include "zjs_aio.h"
2724
#include "zjs_ble.h"
28-
#include "zjs_gpio.h"
29-
#include "zjs_grove_lcd.h"
30-
#include "zjs_pwm.h"
31-
#include "zjs_i2c.h"
32-
#ifdef CONFIG_BOARD_ARDUINO_101
33-
#include "zjs_a101_pins.h"
34-
#endif // ZJS_LINUX_BUILD
35-
#ifdef CONFIG_BOARD_FRDM_K64F
36-
#include "zjs_k64f_pins.h"
37-
#endif
38-
#endif
3925

4026
extern const char script_gen[];
4127

@@ -73,43 +59,6 @@ int main(int argc, char *argv[])
7359
// initialize modules
7460
zjs_modules_init();
7561

76-
#ifndef ZJS_LINUX_BUILD
77-
#ifndef QEMU_BUILD
78-
#ifndef CONFIG_BOARD_FRDM_K64F
79-
#ifdef BUILD_MODULE_AIO
80-
zjs_modules_add("aio", zjs_aio_init);
81-
#endif
82-
#endif
83-
#ifdef BUILD_MODULE_BLE
84-
zjs_modules_add("ble", zjs_ble_init);
85-
#endif
86-
#ifdef BUILD_MODULE_GPIO
87-
zjs_modules_add("gpio", zjs_gpio_init);
88-
#endif
89-
#ifdef BUILD_MODULE_GROVE_LCD
90-
zjs_modules_add("grove_lcd", zjs_grove_lcd_init);
91-
#endif
92-
#ifdef BUILD_MODULE_PWM
93-
zjs_modules_add("pwm", zjs_pwm_init);
94-
#endif
95-
#ifdef BUILD_MODULE_I2C
96-
zjs_modules_add("i2c", zjs_i2c_init);
97-
#endif
98-
#ifdef CONFIG_BOARD_ARDUINO_101
99-
#ifdef BUILD_MODULE_A101
100-
zjs_modules_add("arduino101_pins", zjs_a101_init);
101-
#endif
102-
#endif
103-
#ifdef CONFIG_BOARD_FRDM_K64F
104-
zjs_modules_add("k64f_pins", zjs_k64f_init);
105-
#endif
106-
#endif // QEMU_BUILD
107-
#endif // ZJS_LINUX_BUILD
108-
109-
#ifdef BUILD_MODULE_EVENTS
110-
zjs_modules_add("events", zjs_event_init);
111-
#endif
112-
11362
#ifdef ZJS_LINUX_BUILD
11463
if (argc > 1) {
11564
zjs_read_script(argv[1], &script, &len);

src/zjs_modules.c

Lines changed: 62 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,65 @@
1111
#include "zjs_modules.h"
1212
#include "zjs_util.h"
1313

14-
struct modItem {
14+
#ifndef ZJS_LINUX_BUILD
15+
// ZJS includes
16+
#include "zjs_aio.h"
17+
#include "zjs_ble.h"
18+
#include "zjs_gpio.h"
19+
#include "zjs_grove_lcd.h"
20+
#include "zjs_pwm.h"
21+
#include "zjs_i2c.h"
22+
#ifdef CONFIG_BOARD_ARDUINO_101
23+
#include "zjs_a101_pins.h"
24+
#endif // ZJS_LINUX_BUILD
25+
#ifdef CONFIG_BOARD_FRDM_K64F
26+
#include "zjs_k64f_pins.h"
27+
#endif
28+
#endif
29+
30+
typedef struct module {
1531
const char *name;
16-
InitCB init;
17-
struct modItem *next;
18-
};
32+
initcb_t init;
33+
} module_t;
1934

20-
static struct modItem *modList;
35+
module_t zjs_modules_array[] = {
36+
#ifndef ZJS_LINUX_BUILD
37+
#ifndef QEMU_BUILD
38+
#ifndef CONFIG_BOARD_FRDM_K64F
39+
#ifdef BUILD_MODULE_AIO
40+
{ "aio", zjs_aio_init },
41+
#endif
42+
#endif
43+
#ifdef BUILD_MODULE_BLE
44+
{ "ble", zjs_ble_init },
45+
#endif
46+
#ifdef BUILD_MODULE_GPIO
47+
{ "gpio", zjs_gpio_init },
48+
#endif
49+
#ifdef BUILD_MODULE_GROVE_LCD
50+
{ "grove_lcd", zjs_grove_lcd_init },
51+
#endif
52+
#ifdef BUILD_MODULE_PWM
53+
{ "pwm", zjs_pwm_init },
54+
#endif
55+
#ifdef BUILD_MODULE_I2C
56+
{ "i2c", zjs_i2c_init },
57+
#endif
58+
#ifdef CONFIG_BOARD_ARDUINO_101
59+
#ifdef BUILD_MODULE_A101
60+
{ "arduino101_pins", zjs_a101_init },
61+
#endif
62+
#endif
63+
#ifdef CONFIG_BOARD_FRDM_K64F
64+
{ "k64f_pins", zjs_k64f_init },
65+
#endif
66+
#endif // QEMU_BUILD
67+
#endif // ZJS_LINUX_BUILD
68+
69+
#ifdef BUILD_MODULE_EVENTS
70+
{ "events", zjs_event_init },
71+
#endif
72+
};
2173

2274
static jerry_value_t native_require_handler(const jerry_value_t function_obj,
2375
const jerry_value_t this,
@@ -38,18 +90,14 @@ static jerry_value_t native_require_handler(const jerry_value_t function_obj,
3890
int len = jerry_string_to_char_buffer(arg, (jerry_char_t *)module, sz);
3991
module[len] = '\0';
4092

41-
if (modList) {
42-
struct modItem *t = modList;
43-
while (t) {
44-
if (!strcmp(t->name, module)) {
45-
jerry_value_t obj = jerry_acquire_value(t->init());
46-
return obj;
47-
}
48-
t = t->next;
93+
int modcount = sizeof(zjs_modules_array) / sizeof(module_t);
94+
for (int i = 0; i < modcount; i++) {
95+
module_t *mod = &zjs_modules_array[i];
96+
if (!strcmp(mod->name, module)) {
97+
return jerry_acquire_value(mod->init());
4998
}
5099
}
51100

52-
// Module is not in our list if it gets to this point.
53101
PRINT("MODULE: `%s'\n", module);
54102
return zjs_error("native_require_handler: module not found");
55103
}
@@ -61,27 +109,3 @@ void zjs_modules_init()
61109
// create the C handler for require JS call
62110
zjs_obj_add_function(global_obj, native_require_handler, "require");
63111
}
64-
65-
void zjs_modules_add(const char *name, InitCB cb)
66-
{
67-
struct modItem *item = (struct modItem *)zjs_malloc(sizeof(struct modItem));
68-
if (!item) {
69-
PRINT("Error: out of memory!\n");
70-
exit(1);
71-
}
72-
73-
item->name = name;
74-
item->init = cb;
75-
item->next = NULL;
76-
77-
if (!modList) {
78-
modList = item;
79-
return;
80-
}
81-
82-
struct modItem *t = modList;
83-
while (t->next)
84-
t = t->next;
85-
86-
t->next = item;
87-
}

src/zjs_modules.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
#include "jerry-api.h"
1111

12-
typedef jerry_value_t (*InitCB)();
12+
typedef jerry_value_t (*initcb_t)();
1313

1414
void zjs_modules_init();
15-
void zjs_modules_add(const char *name, InitCB mod_init);
15+
void zjs_modules_add(const char *name, initcb_t mod_init);
1616

1717
#endif // __zjs_modules_h__

0 commit comments

Comments
 (0)