forked from xuos/xiuos
				
			support jerryscript on edu-arm32 board and add test case
This commit is contained in:
		
							parent
							
								
									7ce3748947
								
							
						
					
					
						commit
						bb0fb51e7e
					
				|  | @ -3,6 +3,18 @@ SRC_FILES += jerryscript/build/lib/libjerry-core.a \ | |||
|              jerryscript/build/lib/libjerry-ext.a  \
 | ||||
|              jerryscript/build/lib/libjerry-math.a | ||||
| 
 | ||||
| SRC_FILES += setjmp.S jerry_port.c jerry_main.c jerry_test.c | ||||
| ifeq ($(CONFIG_BOARD_STM32F407_EVB),y) | ||||
| SRC_FILES += mcu/stm32f4/setjmp.S | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(CONFIG_BOARD_CORTEX_M4_EVB),y) | ||||
| SRC_FILES += mcu/cortex-m4-emulator/setjmp.S | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(CONFIG_BOARD_EDU_ARM32_EVB),y) | ||||
| SRC_FILES += mcu/hc32f4a0/setjmp.S | ||||
| endif | ||||
| 
 | ||||
| SRC_FILES += jerry_port.c jerry_main.c jerry_test.c | ||||
| 
 | ||||
| include $(KERNEL_ROOT)/compiler.mk | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| # jerryscript编译步骤,依赖 Ubuntu 20.04 操作系统. | ||||
| # jerryscript编译步骤,本文档依赖 Ubuntu 20.04 操作系统. | ||||
| ## 1、jerryscript源码下载 | ||||
| 
 | ||||
| JerryScript 源码以子模块的形式保存在xiuos/APP_Framework/lib/JerryScript/jerryscript下,进行编译前需要下载,在xiuos根目录下执行: | ||||
|  | @ -25,7 +25,7 @@ sudo apt install \ | |||
| 
 | ||||
| ## 3、jerryscript源码编译 | ||||
| 
 | ||||
| 在APP_Framework/lib/JerryScript路径下,以stm32f4discovery开发板为例,执行: | ||||
| 当前在XIZI操作系统下,支持HC32F4A0单片机和STM32F4单片机两个系列的开发板,在APP_Framework/lib/JerryScript路径下,以edu-arm32开发板(HC32F4A0单片机)为例,执行: | ||||
| 
 | ||||
| ```bash | ||||
| jerryscript/tools/build.py \ | ||||
|  | @ -36,23 +36,37 @@ jerryscript/tools/build.py \ | |||
|     --amalgam=ON \ | ||||
|     --mem-heap=70 \ | ||||
|     --profile=es.next \ | ||||
|     --toolchain=${PWD}/jerryscript/cmake/toolchain_mcu_stm32f4.cmake | ||||
|     --toolchain=${PWD}/jerryscript/cmake/toolchain_mcu_hc32f4a0.cmake | ||||
| ``` | ||||
| 
 | ||||
| ## 4、stm32f4discovery开发板bin包构建 | ||||
| 如果是STM32F4的单片机,将.cmake指定为toolchain_mcu_stm32f4.cmake即可。 | ||||
| 
 | ||||
| ## 4、edu-arm32开发板bin包构建 | ||||
| 
 | ||||
| 在xiuos/Ubiquitous/XiZi_IIoT目录下,执行 | ||||
| 
 | ||||
| ```makefile | ||||
| make BOARD=stm32f407-st-discovery menuconfig | ||||
| make BOARD=edu-arm32 menuconfig | ||||
| ``` | ||||
| 
 | ||||
| 然后在menuconfig界面进入APP_Framework → app lib → lib using JerryScript ,完成勾选,保存退出。 | ||||
| 然后在menuconfig界面进入APP_Framework → app lib → lib using JerryScript ,完成勾选; | ||||
| 
 | ||||
| 为了支持文件解析,需要存储js文件,勾选edu-arm32 feature → Using SD CARD device,使用sd卡进行.js文件的保存。 | ||||
| 
 | ||||
| 保存并,退出menuconfig | ||||
| 
 | ||||
| 执行 | ||||
| 
 | ||||
| ```makefile | ||||
| make BOARD=stm32f407-st-discovery | ||||
| make BOARD=BOARD=edu-arm32 | ||||
| ``` | ||||
| 
 | ||||
| 完成编译。 | ||||
| 完成编译,edu-arm32开发板的烧录方式参考xiuos/Ubiquitous/XiZi_IIoT/board/edu-arm32/目录下的README.md。 | ||||
| 
 | ||||
| 完成烧录后,插入存有js文件的内存卡,内存卡正确完成挂载后,执行: | ||||
| 
 | ||||
| ```shell | ||||
| jerrytest xxx.js | ||||
| ``` | ||||
| 
 | ||||
| 即可看到执行js文件解析,如果jerrytest没有带文件参数,则执行一条js的语句退出。 | ||||
|  |  | |||
|  | @ -272,6 +272,41 @@ static void register_js_function (const char *name_p,jerry_external_handler_t ha | |||
|   jerry_release_value (result_val); | ||||
| } | ||||
| 
 | ||||
| void js_add_function(const jerry_value_t obj, const char *name, | ||||
|                      jerry_external_handler_t func) | ||||
| { | ||||
|     jerry_value_t str = jerry_create_string((const jerry_char_t *)name); | ||||
|     jerry_value_t jfunc = jerry_create_external_function(func); | ||||
| 
 | ||||
|     jerry_set_property(obj, str, jfunc); | ||||
| 
 | ||||
|     jerry_release_value(str); | ||||
|     jerry_release_value(jfunc); | ||||
| } | ||||
| 
 | ||||
| void js_set_property(const jerry_value_t obj, const char *name, | ||||
|                      const jerry_value_t prop) | ||||
| { | ||||
|     jerry_value_t str = jerry_create_string((const jerry_char_t *)name); | ||||
|     jerry_set_property(obj, str, prop); | ||||
|     jerry_release_value (str); | ||||
| } | ||||
| 
 | ||||
| int js_console_init(void) | ||||
| { | ||||
|     jerry_value_t console = jerry_create_object(); | ||||
|     jerry_value_t global_obj = jerry_get_global_object(); | ||||
| 
 | ||||
|     js_add_function(console, "log", jerryx_handler_print); | ||||
| 
 | ||||
|     js_set_property(global_obj, "console", console); | ||||
| 
 | ||||
|     jerry_release_value(global_obj); | ||||
|     jerry_release_value(console); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| static jerry_log_level_t jerry_log_level = JERRY_LOG_LEVEL_ERROR; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -360,6 +395,8 @@ int jerrytest(int argc, char *argv[]) | |||
| 
 | ||||
|   register_js_function ("gc", jerryx_handler_gc); | ||||
|   register_js_function ("print", jerryx_handler_print); | ||||
|   js_console_init(); | ||||
|    | ||||
| 
 | ||||
|   jerry_value_t ret_value = jerry_create_undefined (); | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,68 @@ | |||
| /* Copyright JS Foundation and other contributors, http://js.foundation | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| .syntax unified
 | ||||
| 
 | ||||
| .macro func _name | ||||
| .global \_name | ||||
| .type \_name, %function | ||||
| \_name: | ||||
| .endm | ||||
| .macro endfunc _name | ||||
| .size \_name, .-\_name | ||||
| .endm | ||||
| 
 | ||||
| /** | ||||
|  * setjmp (jmp_buf env) | ||||
|  * | ||||
|  * See also: | ||||
|  *          longjmp | ||||
|  * | ||||
|  * @return 0 - if returns from direct call,
 | ||||
|  *         nonzero - if returns after longjmp. | ||||
|  */ | ||||
| func setjmp | ||||
|     stmdb sp!, {r4 - r11, lr}  | ||||
|     mov r2, sp | ||||
|     add r0, r0, #4  | ||||
|     str r2, [r0] | ||||
|     add r0, r0, #4 | ||||
|     vstm r0!, {s16 - s31} | ||||
|     mov r0, #0 | ||||
|     ldmia sp!, {r4 - r11, pc} | ||||
| endfunc setjmp | ||||
| 
 | ||||
| /** | ||||
|  * longjmp (jmp_buf env, int val) | ||||
|  * | ||||
|  * Note: | ||||
|  *      if val is not 0, then it would be returned from setjmp, | ||||
|  *      otherwise - 0 would be returned. | ||||
|  * | ||||
|  * See also: | ||||
|  *          setjmp | ||||
|  */ | ||||
| func longjmp | ||||
|     ldmia r0!, {r4 - r11, lr} | ||||
|     ldr sp, [r0] | ||||
|     add r0, r0, #4 | ||||
|     vldm r0, {s16 - s31} | ||||
|     mov r0, r1 | ||||
|     cmp r0, #0 | ||||
|     beq 1f | ||||
|     mov r0, #1 | ||||
|     1: | ||||
|     ldmia sp!, {r4 - r11, pc} | ||||
| endfunc longjmp | ||||
|  | @ -0,0 +1,65 @@ | |||
| /* Copyright JS Foundation and other contributors, http://js.foundation | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| .syntax unified
 | ||||
| 
 | ||||
| .macro func _name | ||||
| .global \_name | ||||
| .type \_name, %function | ||||
| \_name: | ||||
| .endm | ||||
| .macro endfunc _name | ||||
| .size \_name, .-\_name | ||||
| .endm | ||||
| 
 | ||||
| /** | ||||
|  * setjmp (jmp_buf env) | ||||
|  * | ||||
|  * See also: | ||||
|  *          longjmp | ||||
|  * | ||||
|  * @return 0 - if returns from direct call,
 | ||||
|  *         nonzero - if returns after longjmp. | ||||
|  */ | ||||
| func setjmp | ||||
|   stmia r0!, {r4 - r11, lr} | ||||
|   str sp, [r0], #4 | ||||
|   vstm r0, {s16 - s31} | ||||
|   mov r0, #0 | ||||
|   bx lr | ||||
| endfunc setjmp | ||||
| 
 | ||||
| /** | ||||
|  * longjmp (jmp_buf env, int val) | ||||
|  * | ||||
|  * Note: | ||||
|  *      if val is not 0, then it would be returned from setjmp, | ||||
|  *      otherwise - 0 would be returned. | ||||
|  * | ||||
|  * See also: | ||||
|  *          setjmp | ||||
|  */ | ||||
| func longjmp | ||||
|   ldmia r0!, {r4 - r11, lr} | ||||
|   ldr sp, [r0] | ||||
|   add r0, r0, #4 | ||||
|   vldm r0, {s16 - s31} | ||||
|   mov r0, r1 | ||||
|   cmp r0, #0 | ||||
|   bne 1f | ||||
|   mov r0, #1 | ||||
|   1: | ||||
|   bx lr | ||||
| endfunc longjmp | ||||
|  | @ -0,0 +1,10 @@ | |||
| var str2 = "hello" | ||||
| var num = 3.1415 | ||||
| 
 | ||||
| console.log("helo world!!"); | ||||
| console.log("helo jerryscript run ok!!"); | ||||
| console.log("helo js engine!!"); | ||||
| console.log("helo world!!" + str2); | ||||
| console.log("num=" + num); | ||||
| console.log("[hello world] end"); | ||||
| 
 | ||||
|  | @ -107,6 +107,7 @@ SECTIONS | |||
| 
 | ||||
|         . = ALIGN(4); | ||||
|         _etext = .; | ||||
|         _exit = .; | ||||
|     } >FLASH | ||||
| 
 | ||||
|     .rodata : | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue