【发布时间】:2016-03-17 17:55:08
【问题描述】:
我刚刚使用全局变量完成了我的代码。我知道使用全局变量是不受欢迎的,所以我打算改用指针。
所以最初我的函数是void time (void),在函数中调用了全局变量。
在我将程序更改为void time (unsigned char *xp, unsigned char *yp, unsigned char *zp, unsigned char *ap)
我测试了两者 (PIC16F877A) 的 RAM 使用率,令我惊讶的是,在我使用指针后,ram 使用率上升了。在不再调用该函数并且我已正确使用它们(这不是问题)后,这些指针将被删除。有人可以向我解释为什么会这样吗? 我是在指针的影响下使你的程序的效率更好。
附加信息(4个变量在变成指针之前都是全局变量)。
人们要求我发布我的代码,所以它就在这里(这个有指针,我使用的是 PIC16F877A)
`void time (unsigned char *time1p, unsigned char *time2p, unsigned char *time3p, unsigned char *finishp){
unsigned char i, j=0;
unsigned char timer [] = {"Time has expired"}; //Memory saver
if (*time1p == 0 && *time2p == 0 && *time3p == 0) //if all the time is 0 finish the sequence
*finishp = 1;
if (*time1p != 0) //Checking to see if the first digit is NOT at 0
*time1p = *time1p - 1; // subtract time 1 by 1
else {*time2p = *time2p - 1; //When time1 is 0
*time1p = 9;} //Time1 going back to it's original value
if (*time2p == 0 && *time1p == 0){ //if time1 and time2 are 0s
LCD_cursor(14,0);
LCD_display_value(*time2p); //Display its value
Delay_ms(200); //Use the delay
if (*time3p != 0){ //The minute value (time3)
*time2p = 5; //60 SECONDS
*time3p = *time3p - 1;
*time1p = 9; } } //Put time 1 to its original value
//Puting the correct numbers in order
LCD_cursor(15,0);
LCD_display_value(*time1p);
LCD_cursor(14,0);
LCD_display_value(*time2p);
LCD_cursor(13,0);
LCD_putch(':');
LCD_cursor(12,0);
LCD_display_value(*time3p);
Delay_ms(300);
/*Memory saver*/
if (*finishp == 1){
LCD_clear();
while (timer[j] > 0x00)
{
LCD_putch(timer[j]); //Print the string
j=j+1;
}
for (i=0; i < 10; i++){
i=0; }
}
////////////End of memory saver
} //end of time function`
【问题讨论】:
-
指针在哪些方面与全局变量相反?以及指针指向什么?你的问题还远没有说清楚。哪张图? PIC32?图16/18? dsPIC? PIC24?
-
您为动态分配预留了多少/多少空间?
-
@user3528438:希望 OP 没有在 PIC16 上使用动态内存分配,我想)。
-
点是“指针”与“全局变量”并不相反。 (您没有明确地说出这一点,但您的问题文本很好地暗示了这一点。)所以这个问题无法回答!
-
@user3528438:64k 池?不。上面提到的 PIC 有 368 字节的 RAM....
标签: c pointers global-variables ram pic