打印调试信息是编程技术中最基础也是十分重要部分。虽然单片机不能像计算机那样有类似控制台打印信息的功能,但是单片机同样可以通过串口打印信息。在实现串口打印调试信息之前,首先要执行以下几个步骤:
1. 初始化串口。
2. 制作串口打印相关的本地API函数。
3. 使用System类来打印信息。
为了能实现串口打印信息,首先要实现单个字符打印的API函数。在vmSys.c文件中,我们可以找到如下代码:
// void doSysPrintChar(char
c);
CELL
doSysPrintChar(MicroVM* vm, CELL* params)
{
uint8_t
pu8Buf = (uint8_t
)params[0].ival; // 获取参数0
CELL res;
vm->rflag = 0; //告诉虚拟机该函数没有返回值
printf("%c",pu8Buf);//将参数内容打印出来。
return res;
}
同时我们还要在nativetable.c中声明这个函数。您可以找到如下代码:
//此处声明API函数
CELL
doSysPrintChar(MicroVM* vm, CELL* params);
然后在native函数集合中添加该函数:
//native函数集合
NativeMethod Natives0[]
=
{
doSysPrintChar,//添加声明的函数
doSysTaskSleep,
};
然后将native函数集合添加到本地函数表中:
//本地函数表
NativeMethod*
nativeTable[] =
{
Natives0,
};
最后不要忘记检查本地API函数的id范围:
//native检查函数
int isNativeValid(int
id1, int id2)
{
switch(id1)//id1表示native集合在table中所在位置
{
case 0:
if (id2 >= 3) //id2表示API所在位置
return 0;
else return Natives0[id2] != NULL;
default:
return 0;
}
}
当API制作完成后,我们要在native.xml文件中声明这个函数。声明的过程包括声明函数名称、id1和id2对应本地API的位置、参数和函数返回值。您可以在native.xml文件中找到相关的声明格式:
<!-- system
APIs-->
<function name =
"doSysPrintChar" id1 = "0" id2 = "0" param =
"char" returnType = "void" />
当API制作完成后,我们可以开始测试这个串口打印。首先在UOL文件夹中创建一个文件叫做Test.uol,然后用记事本或者notepad++打开这个文件。此时可以输入如下代码并保存:
public class Test
{
public static void main()
{
//打印字符串对象
System.out.printString("hello world");//打印字符串对象
System.out.newLine();//换行
System.out.printInt(1);//打印整数类型
System.out.newLine();
System.out.printBool(true);//打印布尔类型
System.out.newLine();
while(true)
{
}
}
}
保存完之后需要在native.xml文件中添加该文件的完整路径,例如:
<path =
"./test.uol" />
如果是./表示是文件在编译器所在的相同目录下。
添加完路径之后可以打开cmd窗口,进入到编译器所在目录下,输入uol并回车。
你将看到如下信息:
********Compiler Version1.0.0**********
Code size = 1162 bytes
Static memory size = 4 bytes
Successfully compiled,
'output.bin' generated!
编译成功之后,把output.bin文件放入到SD卡根目录下,然后将SD卡插入到mini开发板中。将下载文件中的mini开发板project烧写到开发板中,启动仿真和串口助手。您将会看到串口印出hello world,1,true。
如图:
|