From bc8157c3858e3e45dd454d0ed4f9309ea1d0e641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B9=9B=E6=98=8E?= Date: Tue, 26 Mar 2024 09:39:49 +0000 Subject: [PATCH] Fix several issues in VSCode_zh.md --- README_zh.md | 2 +- VSCode_zh.md | 73 +++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/README_zh.md b/README_zh.md index 1fab66e..d2c6f90 100644 --- a/README_zh.md +++ b/README_zh.md @@ -131,7 +131,7 @@ fxsdk build-cg ## 代码提示 -[如何在 Visual Studio Code 中获得代码提示](VSCode_zhCN.md) +[如何在 Visual Studio Code 中获得代码提示](VSCode_zh.md) ## 构建系统 diff --git a/VSCode_zh.md b/VSCode_zh.md index 046da44..1c067c9 100644 --- a/VSCode_zh.md +++ b/VSCode_zh.md @@ -43,6 +43,9 @@ int main(void) // 用黑色在左上角写上 Hello world! dtext(1, 1, C_BLACK, "Hello world!"); + + // 将缓冲区的内容更新到屏幕上 + dupdate(); // 在检测到下一次按键之前卡在这里。 // 因为在卡西欧计算器上,程序结束之后将直接返回菜单, @@ -53,7 +56,9 @@ int main(void) } ``` -如果一切正常的话你会发现,上方的 `C_WHITE` 的 `C_BLACK` 出现错误,因为目前编辑器不知道您是在给彩屏还是黑白屏的计算器写程序。如果您希望让自己的程序可以在两种屏幕上跑,则需要分别考虑两种情况。现在,姑且先让它在黑白屏上跑吧: +如果一切正常的话你会发现,上方的 `C_WHITE` 的 `C_BLACK` 出现错误,因为目前编辑器不知道您是在给彩屏还是黑白屏的计算器写程序。如果您希望使用这些颜色,需要用宏定义计算器型号。`FXCG50` 是彩屏计算器,`FX9860G` 是黑白屏计算器。 + +现在,姑且先让它在黑白屏上跑吧。下方的代码如果尝试编译成彩屏计算器的程序,将不会看到任何输出。 ```c #include @@ -63,16 +68,11 @@ int main(void) { // 如果是黑白屏幕 #ifdef FX9860G - // 用白色来清空屏幕 dclear(C_WHITE); - - // 用黑色在左上角写上 Hello world! dtext(1, 1, C_BLACK, "Hello world!"); + dupdate(); #endif - // 在检测到下一次按键之前卡在这里。 - // 因为在卡西欧计算器上,程序结束之后将直接返回菜单, - // 所以只有卡在这里不让它结束,才能看到程序运行结果。 getkey(); return 1; @@ -81,7 +81,51 @@ int main(void) 然后您会发现没有报错了。因为 gint 内核要求先定义计算器型号,才可以使用颜色。 -如果您下定决心只在黑白屏或者彩色屏上写程序,那您就可以把这个定义放在程序的最顶端: +需要注意的是,在调用 `fxsdk` 来编译的时候,**这个工具会主动告诉编译器计算器的型号是什么**,所以在编译的时候,**就算您不定义宏也不会报错**。这里只是为了在开发的时候能够获取正确的代码提示罢了。 + +但是您可能已经发现,不管是黑白屏还是彩色屏,应该都有黑色和白色才对,那为什么还是需要定义宏才可以用呢?这是因为,这两个颜色在不同的宏定义下的枚举里面的值是不一样的。请看下方的内核头文件: + +使用 `FX9860G` 的 `display-fx.h` +```c +typedef enum +{ + /* Opaque colors */ + C_WHITE = 0, + C_LIGHT = 1, + C_DARK = 2, + C_BLACK = 3, + + /* Monochrome operators */ + C_NONE = 4, + C_INVERT = 5, + + /* Gray operators */ + C_LIGHTEN = 6, + C_DARKEN = 7, + +} color_t; +``` + +使用 `FXCG50` 的 `display-cg.h` +```c +enum { + /* Compatibility with fx9860g color names */ + C_WHITE = 0xffff, + C_LIGHT = 0xad55, + C_DARK = 0x528a, + C_BLACK = 0x0000, + + /* Other colors */ + C_RED = 0xf800, + C_GREEN = 0x07e0, + C_BLUE = 0x001f, + + C_NONE = -1, + C_INVERT = -2, +}; +``` + +现在回到一开始的程序上,如果您下定决心只在黑白屏或者彩色屏上写程序,那您就可以把这个定义放在程序的最顶端: ```c #define FX9860G @@ -90,15 +134,10 @@ int main(void) int main(void) { - // 用白色来清空屏幕 dclear(C_WHITE); - - // 用黑色在左上角写上 Hello world! dtext(1, 1, C_BLACK, "Hello world!"); + dupdate(); - // 在检测到下一次按键之前卡在这里。 - // 因为在卡西欧计算器上,程序结束之后将直接返回菜单, - // 所以只有卡在这里不让它结束,才能看到程序运行结果。 getkey(); return 1; @@ -107,15 +146,13 @@ int main(void) 这样同样也不会有报错。但是如果您实在是不想这么写,可以让告诉编译器,默认使用黑白屏。 -请再一次用命令面板打开 `C/C++: Edit Configurations (UI)`。 - -在“编译器参数”一栏写下: +请再一次用命令面板打开 `C/C++: Edit Configurations (UI)`,并在“编译器参数”一栏写下: ``` -D FX9860G ``` -这样一来,最开始的那份代码也不会有报错了。唯一需要注意的是,在调用 `fxsdk` 来编译的时候,这个工具会主动告诉编译器计算器的型号是什么,所以在编译的时候不会报错。这里只是为了在开发的时候能够获取正确的代码提示罢了。 +这样一来,最开始的那份代码也不会有报错了。 ## 结语