OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8339|回复: 6

第一章 串口打印信息

[复制链接]

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
发表于 2014-5-6 06:54:50 | 显示全部楼层 |阅读模式

打印调试信息是编程技术中最基础也是十分重要部分。虽然单片机不能像计算机那样有类似控制台打印信息的功能,但是单片机同样可以通过串口打印信息。在实现串口打印调试信息之前,首先要执行以下几个步骤:

 

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文件中声明这个函数。声明的过程包括声明函数名称、id1id2对应本地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。
如图:

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-5-6 10:00:27 | 显示全部楼层
谢谢分享,期待更详细完善的教程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2625
金钱
2625
注册时间
2014-2-13
在线时间
514 小时
发表于 2014-5-6 11:26:51 | 显示全部楼层
好东西,期待继续更新
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
 楼主| 发表于 2014-5-6 18:25:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
后续会有更多详细介绍
回复 支持 反对

使用道具 举报

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
 楼主| 发表于 2014-5-6 18:27:05 | 显示全部楼层
回复【3楼】黑夜之狼:
---------------------------------
版本会慢慢趋于稳定,下一个版本会加入垃圾回收
回复 支持 反对

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2625
金钱
2625
注册时间
2014-2-13
在线时间
514 小时
发表于 2014-5-6 19:37:37 | 显示全部楼层
回复【5楼】edmund:
---------------------------------
期待
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-5-6 23:16:24 | 显示全部楼层
回复【4楼】edmund:
---------------------------------
期待哦,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 23:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表