打印

PIC16F877A函数中指针参数传递问题

[复制链接]
3918|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tjx727|  楼主 | 2010-3-26 14:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如下,有两个这样的串口发送函数
//向串口发送一个字符
void send_char_com( uint8 ch)
{
     TXREG = ch;
     while (!TRMT);
     TRMT = 0 ;   //必须写,不然有可能产生错误数据发送
}
   
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(uchar *str)
{
     uint16 k= 0 ;
     do
    {
          send_char_com(*(str + k));
          k++;
     }
     while (*(str + k)!='\0');
}

我在使用51的时候,可以这样使用这个函数send_string_com=(“Welcome,the MCU is turn on!”);但是现在在PIC16F877A中就不可以这样用了,为什么这样写不可以?有什么办法可以这样用?
后来我还发现,这样定义一下这个这个字符串数组就可以用uchar Welcome[]="Welcome,the MCU is turn on!";
send_string_com=("Welcome");
但是我有很多这样的语句需要发送出去,单片机不可以保存这么多字符串数组在里面,所以有没有方法能够让我像原来那样直接像这种方式使用send_string_com=(“Welcome,the MCU is turn on!”);
如能回答,非常感谢!谢谢关注
沙发
tjx727|  楼主 | 2010-3-27 09:01 | 只看该作者
怎么没有人帮我解决下问题啊?谁能帮个忙,小鸟感激不尽!帮主在不在啊?

使用特权

评论回复
板凳
isbit| | 2010-3-27 09:47 | 只看该作者
和我问的问题一样,51可以用,在pic下就是用不了!
pic免费服务电话也是一口咬定我的程序问题,郁闷!

--pic串口打印程序--

使用特权

评论回复
地板
isbit| | 2010-3-27 09:48 | 只看该作者
5
tjx727|  楼主 | 2010-3-27 15:39 | 只看该作者
程序是肯定没有问题的,我在其他平台上面都用了不知道多少次了。我想很有可能PIC的指针不支持这种形式的参数传递,具体我也不是很懂,只知道就是不行。希望牛人能够指点下

使用特权

评论回复
6
huangqi412| | 2010-3-28 00:05 | 只看该作者
晕,51中字符串就不要空间存了不成???? 占的空间基本上一样哦.LZ.

使用特权

评论回复
7
tjx727|  楼主 | 2010-3-29 09:13 | 只看该作者
6# huangqi412

楼上的先不急着晕,至于这个占用空间的问题,可以用事实说话!如上面两个截图,第一个中我只书写了一个send_string_com("Welcome,the MCU is turn on!")的语句,占用的空间为:data = 71.3xdata = 120。接下来我连续书写六条同样的语句,占用的空间还是这么多,请问一下楼上这个是不是代表占用的内存没有变化啊。具体怎么解释,我觉得编译器自动将这些语句保存到CODE的空间(ROM)里面去了,这个还有待讨论,但是肯定是在51系列里面,这个语句的多少是不影响单片机内存(RAM)空间的。
谢谢,你的提示,期待好心人观看解答。到底怎么才能将这条语句原样的移植到PIC的平台上面,不胜感激。

图片1.JPG (41.16 KB )

图片1.JPG

图片2.JPG (56.54 KB )

图片2.JPG

使用特权

评论回复
8
maomao603| | 2010-3-29 14:34 | 只看该作者
51和pic结构都不一样
问题
1你玩的是指针,pic指针使不能跨页用的
2pic少玩指针
3改为数组

使用特权

评论回复
9
tjx727|  楼主 | 2010-4-2 15:33 | 只看该作者
#include <stdio.h>
printf("\rPress a key and I will echo it back:\n");
void putch(unsigned char byte)
{
        /* output one byte */
        while(!TXIF)        /* set when register is empty */
                continue;
        TXREG = byte;
}
这样就可以打印出任意长度的字符串,但是有一个问题,发送字符串的时候不能出现中断,要是出现中断就会打断打印,并且后面没有打印出来的也不会继续打印,不清楚是什么原因。

使用特权

评论回复
10
xbd_119| | 2013-4-22 14:59 | 只看该作者
指针类型不对,改为
void send_string_com(const uchar *str)
试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我们在追忆中展望­ 在展望中  调整着向前的步伐 个人新浪微博:http://t.sina.com.cn/tjx727­

30

主题

322

帖子

0

粉丝