本帖最后由 imath 于 2020-6-14 23:30 编辑
如果有使用过 TI-Nspire 系列计算器的各位应该知道,要实现 TI-Nspire 计算器使用 C 语言来开发程序,必须通过类似 iOS 越狱的方法实现,例如通过安装 Ndless。在安装 Ndless 之后,不仅可以实现电脑上编译 C 程序在 TI-Nspire 计算器上执行,也可以实现直接在 TI-Nspire 机上编写及执行 C 程序,例如利用一款名为 dPicoC 的实用工具。但是,德州仪器官方对于此类越狱的行为始终是零容忍的态度,从 Ndless 发布伊始,就开始通过不断发布系统更新以及阻止降级的方式来封杀 Ndless。自从 2018 年底发布的 TI-Nspire CX II 计算器上搭载的 OS 5.0,以及 2019 年 3 月发布的 OS 4.5.1 开始,Ndless 社区就始终未能攻破德州仪器对 Ndless 的封杀至今。 因此我们需要在德州仪器官方允许在 TI-Nspire 计算器上使用的编程语言,也就是 TI-Lua 上寻找一定的突破。本文介绍的项目 XPicoC,是我们于 2020 年 5 月初利用 20 多天的时间,将一款轻量级、基于 C 语言的 C 解释器 PicoC,跨语言移植至 Lua 脚本语言的成果。 与其他任何在 TI-Nspire 计算器上执行 C 程序的方法不同,XPicoC 是纯粹建构于 Lua 脚本语言之上,不依赖任何其他 C 等等目标代码语言。因此同样可以在任何支持 TI-Lua 脚本语言的 TI-Nspire 系列计算器上执行,不需要任何安装 Ndless 等越狱操作。 XPicoC 并不是一个部分实现 C 标准的“玩具”语言。它几乎实现了所有最核心的 C 标准定义的内容,包括在 Lua 本身并不支持指针的情况下,成功实现了 C 最核心的特性——指针操作。 接下来我们来介绍 XPicoC 的核心特性。 启动包含 XPicoC 的 tns 文档,即可看到计算器的页面变为了一个命令提示符,此为 XPicoC 的交互模式,可以在此直接输入 C 代码并执行。 我们首先演示一个非常简单的范例,定义一个 Hello World 字符串并输出: 接下来我们演示指针操作,定义一个变量 b,不利用库函数将变量 a 的字符串拷贝到变量 b,并且输出变量 b 的内容: 同样也可以利用内置的库函数 strcpy() 来完成这个操作: 除了在交互模式中执行程序以外,XPicoC 也支持从剪贴板读取一整段的 C 程序来执行。例如下面是实现快速排序的算法,利用到了函数以及递归的特性: #include <stdio.h>
int array[16];
//Swap integervalues by array indexes void swap(int a, int b) { int tmp =array[a]; array[a] = array; array = tmp; } //Partition thearray into two halves and return the //index about whichthe array is partitioned int partition(int left, int right) { int pivotIndex = left; int pivotValue = array[pivotIndex]; int index = left; int i; swap(pivotIndex, right); for(i= left; i < right; i++) { if(array < pivotValue) { swap(i, index); index += 1; } } swap(right, index);
returnindex; }
//Quicksort thearray void quicksort(int left, int right) { if(left>= right) return;
int index = partition(left, right); quicksort(left, index - 1); quicksort(index + 1, right); }
void main() { int i;
array[0]= 62; array[1]= 83; array[2]= 4; array[3]= 89; array[4]= 36; array[5]= 21; array[6]= 74; array[7]= 37; array[8]= 65; array[9]= 33; array[10]= 96; array[11]= 38; array[12]= 53; array[13]= 16; array[14]= 74; array[15]= 55;
for(i = 0;i < 16;i++) printf("%d ", array);
printf("\n");
quicksort(0, 15);
for(i = 0;i < 16;i++) printf("%d ", array);
printf("\n"); }
在计算器上新建一个“记事本”应用程序,将这段程序复制到“记事本”应用程序当中。然后我们按 Ctrl+A 全选代码,按 Ctrl+C 复制代码然后回到 1.1 页的 XPicoC 中,按 Ctrl+V 粘贴程序: 以上就是 TI-Nspire 平台的 C 解释器 XPicoC 的简单介绍。
XPicoC作者:露露
2020年6月14日
|