佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1826|回复: 8

pic C PROGRAMMING 问题

[复制链接]
发表于 22-1-2009 01:34 AM | 显示全部楼层
谢谢你们的答复。小弟又有不明白的地方,来自 http://home.earthlink.net/~momotuk/pointers.pdf     (pg16)

int main (void)
     {
             my_strcpy  (strB, strA) ;
              puts(strB) ;
      }

char *my_strcpy (char *destination, char *source)
{   
         char *p = destination;
          while (*source != '\0')
       {
             *p++ = *source++;
          }
               *p = '\0';
           return destination ;
  }

为什么要用pointer for function 呢?单单 char my strcpy(char *destination, char *source) 不行吗?为什么要return address 去main( )? 那个function都没有assign 去任何variable,return 的address会有用到吗?
谢谢了。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 20-1-2009 12:24 AM | 显示全部楼层 |阅读模式
PIC:p24fj128ga010
请问我该如何知道是用这个function name (_T1Interrupt)呢?书上是说参考datasheet ?可是我怎么找不到的?

2.什么是_ISR MACRO??原本是这个的void __attribute__ (( interrupt)) _T1Interrupt ( void)。可是作者说太长了,才改用_ISR . 什么冬冬?

// 1. Timer1 interrupt service routine
        void _ISR _T1Interrupt( void)
       {
             // insert your code here
      
             // remember to clear the interrupt flag before exit
            _T1IF = 0;    还有,怎样知道要用这个VARIABLE呢?在哪里DEFINE的?
        }

明白我的问题吗? 谢谢!

[ 本帖最后由 raymon 于 20-1-2009 12:27 AM 编辑 ]
回复

使用道具 举报

发表于 20-1-2009 10:28 PM | 显示全部楼层
原帖由 raymon 于 20-1-2009 12:24 AM 发表
PIC:p24fj128ga010
请问我该如何知道是用这个function name (_T1Interrupt)呢?书上是说参考datasheet ?可是我怎么找不到的?

2.什么是_ISR MACRO??原本是这个的void __attribute__ (( interrupt)) _T1Interr ...


***c30 user guide
C:\Program Files\Microchip\MPLAB C30\docs\MPLAB_C_Compiler_PIC24_dsPIC_UG_51284H.pdf

1. interrupt function name: 参考c30 user guide section 8.4.3
8.4.3 PIC24F MCUs Interrupt Vectors
里面有你要的information.

2.参考c30 user guide section 8.3.4
8.3.4 Using Macros to Declare Simple ISRs
里面也是有你要的答案

3.T1IF 会define 在你的include file.p24FJ128GA010.h里面:
-->#define _T1IF IFS0bits.T1IF
回复

使用道具 举报

 楼主| 发表于 21-1-2009 12:26 AM | 显示全部楼层
谢谢你的答复,我找到了。
回复

使用道具 举报

 楼主| 发表于 21-1-2009 11:34 AM | 显示全部楼层
各位前辈,小弟又有新的问题讨教了。是关于UART,用来print string. 为什么以下的代码要用*呢?是pointer,对吗?为什么不用s就好了呢?

int putsU2( char *s)
{
     while( *s)                 // loop until *s == ‘\0’, end of string
     putU2( *s++);       // send the character and point to the next one

} // putsU2
回复

使用道具 举报

发表于 21-1-2009 06:46 PM | 显示全部楼层
班门弄斧下。

一个pointer(指针)用的memory(内存)是4byte;一个char也是。

string是一组char。

如果这function传的是string而不是pointer的话,function call的时候,program会先复制要传的string,然后才开始运行function。对于内存来说是要求的比pointer多。

当然还有其他的用法,找pointer相关的题材,网上应该蛮多的。

评分

参与人数 1积分 +5 收起 理由
fritlizt + 5

查看全部评分

回复

使用道具 举报

Follow Us
发表于 21-1-2009 08:21 PM | 显示全部楼层
原帖由 tan_niao 于 21-1-2009 06:46 PM 发表
班门弄斧下。

一个pointer(指针)用的memory(内存)是4byte;一个char也是。

string是一组char。

如果这function传的是string而不是pointer的话,function call的时候,program会先复制要传的string, ...


不要讲到班门弄斧, 大家一起互相学习吧。。。。
纠正一点。 char用1byte.

[ 本帖最后由 fritlizt 于 21-1-2009 08:23 PM 编辑 ]
回复

使用道具 举报

发表于 29-1-2009 04:07 PM | 显示全部楼层
原帖由 raymon 于 22-1-2009 01:34 AM 发表
谢谢你们的答复。小弟又有不明白的地方,来自 http://home.earthlink.net/~momotuk/pointers.pdf     (pg16)

int main (void)
     {
             my_strcpy  (strB, strA) ;
              puts(strB) ;
  ...


我也想知道答案。但我猜,可能func return的是destination (也就是pointer type),所以要用‘*’。有错请更正,谢谢

评分

参与人数 1积分 +5 收起 理由
fritlizt + 5

查看全部评分

回复

使用道具 举报


ADVERTISEMENT

发表于 29-1-2009 05:40 PM | 显示全部楼层
原帖由 raymon 于 22-1-2009 01:34 AM 发表
谢谢你们的答复。小弟又有不明白的地方,来自 http://home.earthlink.net/~momotuk/pointers.pdf     (pg16)

int main (void)
     {
             my_strcpy  (strB, strA) ;
              puts(strB) ;
  ...


-〉为什么要用pointer for function 呢?单单 char my strcpy(char *destination, char *source) 不行吗?
首先你要确定你要return的东西是什么。
在你的case, destination是pointer to string. 你要return destination, 所以你要return pointer.
如果你的function是return 'T', 还是 'F'来确定成功还是失败, 而不是destination address,
你就用char my_strcpy(char *destination, char *source)

-〉为什么要return address 去main( )?那个function都没有assign 去任何variable,return 的address会有用到吗?
在你的example里面, 的确他并没有用到return address.可能作者有其他用意。所以你的function其实可以用void,不必return 任何东西也是可以
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 16-4-2024 12:00 PM , Processed in 0.099531 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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