From 52f1c9a599fcc496af0eb6b5c1cd3ed89e65f8de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com> Date: Tue, 29 Apr 2025 22:44:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(boards):=20=E4=BF=AE=E5=A4=8Darduino?= =?UTF-8?q?=E4=B8=8B=20`=E6=95=B0=E7=BB=84=E5=B7=A6/=E5=8F=B3=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF`=20=E6=93=8D=E4=BD=9C=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boards/default_src/arduino/webpack.common.js | 13 +++++++++++ boards/default_src/arduino/webpack.dev.js | 10 ++++----- boards/default_src/arduino/webpack.prod.js | 12 +++++----- .../default_src/arduino_avr/blocks/lists.js | 5 ++--- .../arduino_avr/generators/lists.js | 13 ++++------- boards/default_src/arduino_avr/template.xml | 22 +++++++++---------- .../templates/func-array-rotate-loop.c | 20 +++++++++++++++++ .../default_src/arduino_avr/webpack.common.js | 14 +++++++++--- boards/default_src/arduino_avr/webpack.dev.js | 10 ++++----- .../default_src/arduino_avr/webpack.prod.js | 12 +++++----- .../arduino_esp32/origin/xml/esp32.xml | 22 +++++++++---------- .../arduino_esp32/origin/xml/mpython.xml | 22 ++++++++++--------- .../arduino_esp32/webpack.common.js | 14 +++++++++--- .../default_src/arduino_esp32/webpack.dev.js | 10 ++++----- .../default_src/arduino_esp32/webpack.prod.js | 12 +++++----- .../default_src/arduino_esp8266/template.xml | 20 ++++++++--------- .../arduino_esp8266/webpack.common.js | 14 +++++++++--- .../arduino_esp8266/webpack.dev.js | 10 ++++----- .../arduino_esp8266/webpack.prod.js | 12 +++++----- 19 files changed, 160 insertions(+), 107 deletions(-) create mode 100644 boards/default_src/arduino/webpack.common.js create mode 100644 boards/default_src/arduino_avr/templates/func-array-rotate-loop.c diff --git a/boards/default_src/arduino/webpack.common.js b/boards/default_src/arduino/webpack.common.js new file mode 100644 index 00000000..5e590020 --- /dev/null +++ b/boards/default_src/arduino/webpack.common.js @@ -0,0 +1,13 @@ +const common = require('../../../webpack.common'); +const { merge } = require('webpack-merge'); + +module.exports = merge(common, { + module: { + rules: [ + { + test: /\.(txt|c|cpp|h|hpp)$/, + type: 'asset/source' + } + ] + } +}); \ No newline at end of file diff --git a/boards/default_src/arduino/webpack.dev.js b/boards/default_src/arduino/webpack.dev.js index 54e4088a..34785049 100644 --- a/boards/default_src/arduino/webpack.dev.js +++ b/boards/default_src/arduino/webpack.dev.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("../../../webpack.common"); -const { merge } = require("webpack-merge"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); module.exports = merge(common, { - mode: "development", + mode: 'development', devtool: 'source-map', plugins: [ new ESLintPlugin({ diff --git a/boards/default_src/arduino/webpack.prod.js b/boards/default_src/arduino/webpack.prod.js index 45773239..331b45f4 100644 --- a/boards/default_src/arduino/webpack.prod.js +++ b/boards/default_src/arduino/webpack.prod.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("../../../webpack.common"); -const { merge } = require("webpack-merge"); -const TerserPlugin = require("terser-webpack-plugin"); -var HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const TerserPlugin = require('terser-webpack-plugin'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = merge(common, { - mode: "production", + mode: 'production', optimization: { minimize: true, minimizer: [ diff --git a/boards/default_src/arduino_avr/blocks/lists.js b/boards/default_src/arduino_avr/blocks/lists.js index 39f48709..c97bca3a 100644 --- a/boards/default_src/arduino_avr/blocks/lists.js +++ b/boards/default_src/arduino_avr/blocks/lists.js @@ -721,10 +721,9 @@ export const loop_array = { init: function () { this.appendValueInput("name") .setCheck(null) - .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE) - .appendField(new Blockly.FieldDropdown(DATATYPES), "TYPE") .appendField(Blockly.Msg.MIXLY_LIST_NAME); this.appendDummyInput() + .setAlign(Blockly.inputs.Align.RIGHT) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.LEFT_CYCLE, "0"], [Blockly.Msg.RIGHT_CYCLE, "1"] @@ -732,7 +731,7 @@ export const loop_array = { this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(LISTS_HUE); - this.setTooltip(Blockly.Msg.LEFT_CYCLE + Blockly.Msg.LEFT_CYCLE1 + Blockly.Msg.RIGHT_CYCLE + Blockly.Msg.RIGHT_CYCLE1); + this.setTooltip(''); this.setHelpUrl(""); } }; diff --git a/boards/default_src/arduino_avr/generators/lists.js b/boards/default_src/arduino_avr/generators/lists.js index d98b00a7..f4e9ead8 100644 --- a/boards/default_src/arduino_avr/generators/lists.js +++ b/boards/default_src/arduino_avr/generators/lists.js @@ -259,19 +259,14 @@ export const lists_array2_setup_get_data = function (_, generator) { return code1; } +import FUNC_ARRAY_ROTATE_LOOP_TEMPLATE from '../templates/func-array-rotate-loop.c'; + // 一维数组循环 export const loop_array = function (_, generator) { - var type = this.getFieldValue('TYPE'); var mode = this.getFieldValue('mode'); var name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC); - if (mode == 0) { - generator.definitions_['loop_array1'] = 'void array_left_loop() {\n ' + type + ' item =0;\n item = ' + name + '[(int)(0)];\n for (int i = (2); i <= (sizeof(' + name + ')/sizeof(' + name + '[0])); i = i + (1)) {\n ' + name + '[(int)((i - 1) - 1)] = ' + name + '[(int)(i - 1)];\n }\n ' + name + '[(int)(sizeof(' + name + ')/sizeof(' + name + '[0]) - 1)] = item;\n}\n'; - var code = 'array_left_loop();\n'; - } - if (mode == 1) { - generator.definitions_['loop_array'] = 'void array_right_loop() {\n ' + type + ' item =0;\n item = ' + name + '[(int)(sizeof(' + name + ')/sizeof(' + name + '[0]) - 1)];\n for (int i = (sizeof(' + name + ')/sizeof(' + name + '[0])); i >= (1); i = i + (-1)) {\n ' + name + '[(int)((i + 1) - 1)] = ' + name + '[(int)(i - 1)];\n }\n ' + name + '[(int)(0)] = item;\n}\n'; - var code = 'array_right_loop();\n'; - } + generator.definitions_['function_array_rotate_loop'] = FUNC_ARRAY_ROTATE_LOOP_TEMPLATE; + var code = `array_rotate_loop(${name}, sizeof(${name}[0]), sizeof(${name}) / sizeof(${name}[0]), ${mode});\n`; return code; } diff --git a/boards/default_src/arduino_avr/template.xml b/boards/default_src/arduino_avr/template.xml index ae70d5c5..b43eeaff 100644 --- a/boards/default_src/arduino_avr/template.xml +++ b/boards/default_src/arduino_avr/template.xml @@ -577,6 +577,13 @@ + + + + mylist + + + int mylist @@ -645,7 +652,7 @@ - array + mylist @@ -667,7 +674,7 @@ - array + mylist @@ -689,7 +696,7 @@ - array + mylist @@ -703,13 +710,6 @@ - - - - array - - - @@ -2690,7 +2690,7 @@ - array + mylist diff --git a/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c b/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c new file mode 100644 index 00000000..e2143b40 --- /dev/null +++ b/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c @@ -0,0 +1,20 @@ +void array_rotate_loop(void *arr, size_t elem_size, size_t length, bool right) { + if (length <= 1) { + return; + } + + uint8_t buffer[32]; + if (elem_size > sizeof(buffer)) { + return; + } + + if (right) { + memcpy(buffer, (uint8_t *)arr + (length - 1) * elem_size, elem_size); + memmove((uint8_t *)arr + elem_size, arr, (length - 1) * elem_size); + memcpy(arr, buffer, elem_size); + } else { + memcpy(buffer, arr, elem_size); + memmove(arr, (uint8_t *)arr + elem_size, (length - 1) * elem_size); + memcpy((uint8_t *)arr + (length - 1) * elem_size, buffer, elem_size); + } +} \ No newline at end of file diff --git a/boards/default_src/arduino_avr/webpack.common.js b/boards/default_src/arduino_avr/webpack.common.js index 835b2f01..76e39a5e 100644 --- a/boards/default_src/arduino_avr/webpack.common.js +++ b/boards/default_src/arduino_avr/webpack.common.js @@ -1,11 +1,19 @@ -const path = require("path"); -const common = require("../../../webpack.common"); -const { merge } = require("webpack-merge"); +const path = require('path'); +const common = require('../../../webpack.common'); +const { merge } = require('webpack-merge'); module.exports = merge(common, { resolve: { alias: { '@mixly/arduino': path.resolve(__dirname, '../arduino') } + }, + module: { + rules: [ + { + test: /\.(txt|c|cpp|h|hpp)$/, + type: 'asset/source' + } + ] } }); \ No newline at end of file diff --git a/boards/default_src/arduino_avr/webpack.dev.js b/boards/default_src/arduino_avr/webpack.dev.js index d84bda69..31d3a078 100644 --- a/boards/default_src/arduino_avr/webpack.dev.js +++ b/boards/default_src/arduino_avr/webpack.dev.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); module.exports = merge(common, { - mode: "development", + mode: 'development', devtool: 'source-map', plugins: [ new ESLintPlugin({ diff --git a/boards/default_src/arduino_avr/webpack.prod.js b/boards/default_src/arduino_avr/webpack.prod.js index 0e9f3265..331b45f4 100644 --- a/boards/default_src/arduino_avr/webpack.prod.js +++ b/boards/default_src/arduino_avr/webpack.prod.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const TerserPlugin = require("terser-webpack-plugin"); -var HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const TerserPlugin = require('terser-webpack-plugin'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = merge(common, { - mode: "production", + mode: 'production', optimization: { minimize: true, minimizer: [ diff --git a/boards/default_src/arduino_esp32/origin/xml/esp32.xml b/boards/default_src/arduino_esp32/origin/xml/esp32.xml index 870670d1..9c3dee63 100644 --- a/boards/default_src/arduino_esp32/origin/xml/esp32.xml +++ b/boards/default_src/arduino_esp32/origin/xml/esp32.xml @@ -611,6 +611,13 @@ + + + + mylist + + + int mylist @@ -679,7 +686,7 @@ - array + mylist @@ -701,7 +708,7 @@ - array + mylist @@ -723,7 +730,7 @@ - array + mylist @@ -737,13 +744,6 @@ - - - - array - - - @@ -2096,7 +2096,7 @@ - array + mylist diff --git a/boards/default_src/arduino_esp32/origin/xml/mpython.xml b/boards/default_src/arduino_esp32/origin/xml/mpython.xml index 1892aeca..1ac6f4c5 100644 --- a/boards/default_src/arduino_esp32/origin/xml/mpython.xml +++ b/boards/default_src/arduino_esp32/origin/xml/mpython.xml @@ -582,6 +582,13 @@ + + + + mylist + + + int mylist @@ -650,7 +657,7 @@ - array + mylist @@ -672,7 +679,7 @@ - array + mylist @@ -694,7 +701,7 @@ - array + mylist @@ -708,12 +715,7 @@ - - - - array - - + @@ -2204,7 +2206,7 @@ - array + mylist diff --git a/boards/default_src/arduino_esp32/webpack.common.js b/boards/default_src/arduino_esp32/webpack.common.js index 274a3f53..4d398c84 100644 --- a/boards/default_src/arduino_esp32/webpack.common.js +++ b/boards/default_src/arduino_esp32/webpack.common.js @@ -1,6 +1,6 @@ -const path = require("path"); -const common = require("../../../webpack.common"); -const { merge } = require("webpack-merge"); +const path = require('path'); +const common = require('../../../webpack.common'); +const { merge } = require('webpack-merge'); module.exports = merge(common, { resolve: { @@ -8,5 +8,13 @@ module.exports = merge(common, { '@mixly/arduino': path.resolve(__dirname, '../arduino'), '@mixly/arduino-avr': path.resolve(__dirname, '../arduino_avr') } + }, + module: { + rules: [ + { + test: /\.(txt|c|cpp|h|hpp)$/, + type: 'asset/source' + } + ] } }); \ No newline at end of file diff --git a/boards/default_src/arduino_esp32/webpack.dev.js b/boards/default_src/arduino_esp32/webpack.dev.js index d84bda69..31d3a078 100644 --- a/boards/default_src/arduino_esp32/webpack.dev.js +++ b/boards/default_src/arduino_esp32/webpack.dev.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); module.exports = merge(common, { - mode: "development", + mode: 'development', devtool: 'source-map', plugins: [ new ESLintPlugin({ diff --git a/boards/default_src/arduino_esp32/webpack.prod.js b/boards/default_src/arduino_esp32/webpack.prod.js index 0e9f3265..331b45f4 100644 --- a/boards/default_src/arduino_esp32/webpack.prod.js +++ b/boards/default_src/arduino_esp32/webpack.prod.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const TerserPlugin = require("terser-webpack-plugin"); -var HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const TerserPlugin = require('terser-webpack-plugin'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = merge(common, { - mode: "production", + mode: 'production', optimization: { minimize: true, minimizer: [ diff --git a/boards/default_src/arduino_esp8266/template.xml b/boards/default_src/arduino_esp8266/template.xml index ac78383b..652ed40b 100644 --- a/boards/default_src/arduino_esp8266/template.xml +++ b/boards/default_src/arduino_esp8266/template.xml @@ -536,6 +536,13 @@ + + + + mylist + + + int mylist @@ -604,7 +611,7 @@ - array + mylist @@ -626,7 +633,7 @@ - array + mylist @@ -648,7 +655,7 @@ - array + mylist @@ -662,13 +669,6 @@ - - - - array - - - diff --git a/boards/default_src/arduino_esp8266/webpack.common.js b/boards/default_src/arduino_esp8266/webpack.common.js index 274a3f53..4d398c84 100644 --- a/boards/default_src/arduino_esp8266/webpack.common.js +++ b/boards/default_src/arduino_esp8266/webpack.common.js @@ -1,6 +1,6 @@ -const path = require("path"); -const common = require("../../../webpack.common"); -const { merge } = require("webpack-merge"); +const path = require('path'); +const common = require('../../../webpack.common'); +const { merge } = require('webpack-merge'); module.exports = merge(common, { resolve: { @@ -8,5 +8,13 @@ module.exports = merge(common, { '@mixly/arduino': path.resolve(__dirname, '../arduino'), '@mixly/arduino-avr': path.resolve(__dirname, '../arduino_avr') } + }, + module: { + rules: [ + { + test: /\.(txt|c|cpp|h|hpp)$/, + type: 'asset/source' + } + ] } }); \ No newline at end of file diff --git a/boards/default_src/arduino_esp8266/webpack.dev.js b/boards/default_src/arduino_esp8266/webpack.dev.js index d84bda69..31d3a078 100644 --- a/boards/default_src/arduino_esp8266/webpack.dev.js +++ b/boards/default_src/arduino_esp8266/webpack.dev.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); module.exports = merge(common, { - mode: "development", + mode: 'development', devtool: 'source-map', plugins: [ new ESLintPlugin({ diff --git a/boards/default_src/arduino_esp8266/webpack.prod.js b/boards/default_src/arduino_esp8266/webpack.prod.js index 0e9f3265..331b45f4 100644 --- a/boards/default_src/arduino_esp8266/webpack.prod.js +++ b/boards/default_src/arduino_esp8266/webpack.prod.js @@ -1,11 +1,11 @@ -const path = require("path"); -const common = require("./webpack.common"); -const { merge } = require("webpack-merge"); -const TerserPlugin = require("terser-webpack-plugin"); -var HtmlWebpackPlugin = require("html-webpack-plugin"); +const path = require('path'); +const common = require('./webpack.common'); +const { merge } = require('webpack-merge'); +const TerserPlugin = require('terser-webpack-plugin'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = merge(common, { - mode: "production", + mode: 'production', optimization: { minimize: true, minimizer: [