查看: 1900|回复: 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会有用到吗?
谢谢了。 |
|
|
|
|
|
|
|
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相关的题材,网上应该蛮多的。 |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 21-1-2009 08:21 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-1-2009 04:07 PM
|
显示全部楼层
我也想知道答案。但我猜,可能func return的是destination (也就是pointer type),所以要用‘*’。有错请更正,谢谢 |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 29-1-2009 05:40 PM
|
显示全部楼层
-〉为什么要用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 任何东西也是可以 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|