會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





位址指標(char *)- 指向程式段問題(宣告 const)
中級會員
註冊日期:
2011/06/17 14:00
所屬群組:
註冊會員
文章: 41
等級: 5; EXP: 19
HP : 0 / 104
MP : 13 / 2245
離線
char str1[]="1234";
const char str2[]="1234";
char *p;

p= str1; OK
p=str2; warning:discards qualifiers from pointer target type

因位字型表佔用空間略大,不太想放在記憶體空間,要放在程式區段,因此宣告const(不須修改),但會出現警告訊息(不確定功能是否正常),請問各位先進是否有任何建議(副程式須共用,一定須要位址傳遞)
thanks.

2015/02/06 17:34
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1595
等級: 33; EXP: 85
HP : 164 / 821
MP : 531 / 19902
離線
用的Compiler是?

2015/02/06 17:46
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
中級會員
註冊日期:
2011/06/17 14:00
所屬群組:
註冊會員
文章: 41
等級: 5; EXP: 19
HP : 0 / 104
MP : 13 / 2245
離線
MPLAB IDE8.85

目前改下面宣告OK,.map檔顯示 p 被分配在程式區(.nbss)不會在.const,等下星期一測試功能是否正常
const char *p;

thanks.

2015/02/06 18:05
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
高級會員
註冊日期:
2008/11/13 13:41
所屬群組:
註冊會員
文章: 150
等級: 11; EXP: 30
HP : 0 / 257
MP : 50 / 7466
離線
AdamSyu是問你用的compiler是XC8或C18還是hi-tech c.等等

p=str2; warning:discards qualifiers from pointer target type
用const char *p即可,因為他跟你說講類型非指定的型態。

2015/02/06 23:36
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1595
等級: 33; EXP: 85
HP : 164 / 821
MP : 531 / 19902
離線
我猜你用的是C18,
在C18下, 如果想要指定資料放置於flash區域,
必須使用rom關鍵字才可以.

所以完整的宣告應該如下
const rom char Array[10];
const rom char * ArrayPtr;

在XC8, XC16, XC32下, 則只需要使用const宣告即可.

2015/02/06 23:41
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
中級會員
註冊日期:
2011/06/17 14:00
所屬群組:
註冊會員
文章: 41
等級: 5; EXP: 19
HP : 0 / 104
MP : 13 / 2245
離線
Compiler - C30
使用下列宣告 Compiler-OK,功能-OK
rom 宣告會找時間看一下手冊
thanks all.

const char str2[]="1234";
const char *p;
p=str2;

str2 -> .const(配置在Program Memory)
p -> .nbss

2015/02/09 09:08
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14497
等級: 73; EXP: 5
HP : 1080 / 1801
MP : 4832 / 76121
離線
str2 -> .const(配置在Program Memory) : 是 ROM 查表的陣列位址

p -> .nbss : p 是指標變數,是指向 ROM 陣列位址 (str2)。nbss 是指該指標變數是放在前面 RAM 8KB 內,屬於 near 型態,可以做 Byte(奇、偶位址皆可) & Word(偶數位址) 的存取。

2015/02/10 11:08
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
中級會員
註冊日期:
2015/02/10 11:55
所屬群組:
註冊會員
文章: 42
等級: 5; EXP: 27
HP : 0 / 106
MP : 14 / 1149
離線
想判斷str1跟str2是否相同,請問為什麼以下寫法不會成功?

int A=0x00;
const rom char str1[]="1234";
char str2[]="1234";
if(strcmp(str1,str2)==0){A=0x01;}

這樣就可以
int A=0x00;
const rom char str1[]="1234";
const rom char str2[]="1234";
if(strcmp(str1,str2)==0){A=0x01;}

2015/02/10 13:26
轉換PDF檔 列印


Re: 位址指標(char *)- 指向程式段問題(宣告 const)
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14497
等級: 73; EXP: 5
HP : 1080 / 1801
MP : 4832 / 76121
離線
剛看了 C:\Program Files (x86)\Microchip\MPLAB C30\docs\16-Bit_Language_Tools_Libraries_51456G.pdf

沒有特別標示出 ROM & RAM 之間得比較,


strcmp
()

Description: Compares two strings.
Include: <
string.h>
Prototype: int strcmp(const char *s1, const char *s2);
Arguments: s1 first string
s2 second string
Return Value: Returns a positive number if s1 is greater than s2, zero if s1 is equal to
s2
or a negative number if s1 is less than s2.
Remarks: This function compares successive characters from s1 and s2 until
they are not equal
or the null terminator is reached.
Example: #include <string.h> /* for strcmp */
#include <stdio.h> /* for printf */
int main(void)
{
char buf1[50] = "Where is the time?";
char buf2[50] = "Where did they go?";
char buf3[50] = "Why?";
int res;
printf("buf1 : %sn", buf1);
printf("buf2 : %sn", buf2);
printf("buf3 : %snn", buf3);
res = strcmp(buf1, buf2);
if (
res < 0)
printf("buf1 comes before buf2n");
else if (
res == 0)
printf("buf1 and buf2 are equaln");
else
printf("buf2 comes before buf1n");

2015/02/10 17:38
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project