久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 917|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教程序簡(jiǎn)化及STC15單片機(jī)eeprom存儲(chǔ)的問(wèn)題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:86421 發(fā)表于 2024-10-1 14:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
現(xiàn)有一程序如下:
if(pc==1)
{
RD1[0]=.......
RD1[1]=.......
RD1[2]=.......
}
if(pc==2)
{
GD1[0]=.......
GD1[1]=.......
GD1[2]=.......
}
如何簡(jiǎn)化一下?如:
設(shè)一下中間變量X
if(pc==1)X=RG1
if(pc==2)X=GG1
X[0]=.......
X[1]=.......
X[2]=.......

另外,STC15單片機(jī)eeprom存儲(chǔ)中,本人只會(huì)一個(gè)變量的存儲(chǔ),如X=IAPreadbyte(IAP_ADDRESS);假如多個(gè)變量X1,X2,X3,...X8,應(yīng)該如何寫程序?因?yàn)閱纹瑱C(jī)只有兩個(gè)扇區(qū),要先擦除,一擦除就得一個(gè)扇區(qū)一個(gè)扇區(qū)的。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:404160 發(fā)表于 2024-10-1 16:49 | 只看該作者
下面是一個(gè)簡(jiǎn)化的示例:

c
// 定義兩個(gè)數(shù)組
int RD1[3];
int GD1[3];

// 定義一個(gè)指針數(shù)組
int (*X)[3];

// 根據(jù)pc的值選擇數(shù)組
if(pc == 1) {
    X = RD1;
} else if(pc == 2) {
    X = GD1;
}

// 現(xiàn)在可以使用X來(lái)賦值
X[0] = ...;
X[1] = ...;
X[2] = ...;
這樣,你只需要根據(jù)pc的值來(lái)選擇不同的數(shù)組,然后通過(guò)X來(lái)賦值,從而避免了冗余的if語(yǔ)句。

對(duì)于你的第二個(gè)問(wèn)題,關(guān)于STC15單片機(jī)的EEPROM存儲(chǔ)多個(gè)變量,你可以使用一個(gè)結(jié)構(gòu)體來(lái)存儲(chǔ)這些變量,然后一次性讀取或?qū)懭胝麄(gè)結(jié)構(gòu)體。下面是一個(gè)示例:

c
// 定義一個(gè)結(jié)構(gòu)體來(lái)存儲(chǔ)多個(gè)變量
typedef struct {
    int X1;
    int X2;
    int X3;
    int X4;
    int X5;
    int X6;
    int X7;
    int X8;
} MyData;

// 定義一個(gè)變量來(lái)存儲(chǔ)數(shù)據(jù)
MyData myData;

// 讀取數(shù)據(jù)
void ReadData() {
    // 假設(shè)IAP_ADDRESS是起始地址
    int i;
    for(i = 0; i < sizeof(MyData); i++) {
        ((char*)&myData)[i] = IAPreadbyte(IAP_ADDRESS + i);
    }
}

// 寫入數(shù)據(jù)
void WriteData() {
    // 假設(shè)IAP_ADDRESS是起始地址
    int i;
    for(i = 0; i < sizeof(MyData); i++) {
        IAPwritebyte(IAP_ADDRESS + i, ((char*)&myData)[i]);
    }
}
在這個(gè)示例中,我們定義了一個(gè)MyData結(jié)構(gòu)體來(lái)存儲(chǔ)8個(gè)變量。然后,我們定義了一個(gè)myData變量來(lái)存儲(chǔ)數(shù)據(jù)。在ReadData函數(shù)中,我們逐個(gè)字節(jié)地讀取EEPROM中的數(shù)據(jù),并將其存儲(chǔ)到myData中。在WriteData函數(shù)中,我們逐個(gè)字節(jié)地將myData中的數(shù)據(jù)寫入EEPROM。

請(qǐng)注意,這里的IAPreadbyte和IAPwritebyte函數(shù)是假設(shè)的函數(shù)名,你需要根據(jù)你的實(shí)際情況來(lái)替換它們。同時(shí),你需要確保在寫入數(shù)據(jù)之前已經(jīng)正確地擦除了EEPROM的相應(yīng)扇區(qū)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:86421 發(fā)表于 2024-10-1 17:24 | 只看該作者
飛云居士 發(fā)表于 2024-10-1 16:49
下面是一個(gè)簡(jiǎn)化的示例:

c

感謝你的指導(dǎo)。謝謝!
回復(fù)

使用道具 舉報(bào)

地板
ID:1109793 發(fā)表于 2024-10-1 17:42 | 只看該作者
沙發(fā)的方法如果兩個(gè)數(shù)組的內(nèi)容是一樣的,可以,不一樣就不行了吧。
存儲(chǔ)問(wèn)題,也可以用數(shù)組。我就用數(shù)組一次性存100多個(gè)字節(jié)的。只是有的是char有的int,有的甚至是bit,存儲(chǔ)時(shí)都按照int來(lái)搞,比較浪費(fèi)空間。如果是結(jié)構(gòu)體就會(huì)節(jié)省一些。但是訪問(wèn)我感覺(jué)不如數(shù)組,比如數(shù)組用一個(gè)循環(huán)遍訪所有成員,結(jié)構(gòu)體就不太會(huì)搞。
回復(fù)

使用道具 舉報(bào)

5#
ID:86421 發(fā)表于 2024-10-1 18:04 | 只看該作者
飛云居士 發(fā)表于 2024-10-1 16:49
下面是一個(gè)簡(jiǎn)化的示例:

c

第二個(gè)存儲(chǔ)的問(wèn)題已經(jīng)明白了,感謝。第一個(gè)問(wèn)題其實(shí)是一個(gè)雙色3264點(diǎn)陣屏的,我想做一個(gè)配色,按鍵調(diào)整。將配色數(shù)據(jù)(0,1,2三種,紅綠黃)原程序是:
uchar data RD1[8];        //紅數(shù)據(jù)緩存
uchar data RD2[8];
uchar data GD1[8];        //綠數(shù)據(jù)緩存
uchar data GD2[8];
unsigned char pc=0;   //配色標(biāo)志


void display1(void)
{
  uchar  (*X)[8];       
  if(pc==0) X=RD1;
  if(pc==1) X=GD1;
  if(pc==1) X=GD1=RD1;       
         X[0]=SZG[hour/10][row];
         X[1]=SZG[hour%10][row];
         if(SHAN) X[2]=TABS[10][row];else X[2]=TABS[11][row];
         X[3]=SZG[min/10][row];
         X[4]=SZG[min%10][row];
         if(SHAN) X[5]=TABS[10][row];else X[5]=TABS[11][row];
         X[6]=SZG[sec/10][row];
         X[7]=SZG[sec%10][row];
}

上面的代碼編譯不過(guò)呀?百忙之中煩請(qǐng)指導(dǎo)一下。

回復(fù)

使用道具 舉報(bào)

6#
ID:404160 發(fā)表于 2024-10-1 18:33 | 只看該作者
xiaobendan001 發(fā)表于 2024-10-1 17:42
沙發(fā)的方法如果兩個(gè)數(shù)組的內(nèi)容是一樣的,可以,不一樣就不行了吧。
存儲(chǔ)問(wèn)題,也可以用數(shù)組。我就用數(shù)組一 ...

你可以定義一個(gè)結(jié)構(gòu)體來(lái)包含所有變量:

typedef struct {
    uint8_t x1;
    uint8_t x2;
    uint8_t x3;
    // 添加更多變量...
    uint8_t x8;
} EEPROM_Data;

EEPROM_Data eData;
回復(fù)

使用道具 舉報(bào)

7#
ID:404160 發(fā)表于 2024-10-1 18:35 | 只看該作者
xiaobendan001 發(fā)表于 2024-10-1 17:42
沙發(fā)的方法如果兩個(gè)數(shù)組的內(nèi)容是一樣的,可以,不一樣就不行了吧。
存儲(chǔ)問(wèn)題,也可以用數(shù)組。我就用數(shù)組一 ...

可以用字節(jié)型指針,用size偶發(fā)()函數(shù)做要寫入的長(zhǎng)度
回復(fù)

使用道具 舉報(bào)

8#
ID:404160 發(fā)表于 2024-10-1 18:37 | 只看該作者
xiaobendan001 發(fā)表于 2024-10-1 17:42
沙發(fā)的方法如果兩個(gè)數(shù)組的內(nèi)容是一樣的,可以,不一樣就不行了吧。
存儲(chǔ)問(wèn)題,也可以用數(shù)組。我就用數(shù)組一 ...

下面是一個(gè)示例,展示如何定義一個(gè)包含不同類型成員的結(jié)構(gòu)體,并如何使用循環(huán)來(lái)遍歷這些成員:

c
#include <stdint.h>

// 定義一個(gè)結(jié)構(gòu)體,包含不同類型的成員
typedef struct {
    char c;
    int i;
    unsigned char bitField:1;
    unsigned char anotherField:3;
} MyStruct;

// 定義一個(gè)結(jié)構(gòu)體數(shù)組
MyStruct myArray[100];

// 定義一個(gè)函數(shù)來(lái)遍歷結(jié)構(gòu)體數(shù)組
void TraverseStructArray() {
    for (int index = 0; index < 100; index++) {
        // 訪問(wèn)每個(gè)結(jié)構(gòu)體的成員
        char c = myArray[index].c;
        int i = myArray[index].i;
        unsigned char bitField = myArray[index].bitField;
        unsigned char anotherField = myArray[index].anotherField;

        // 根據(jù)需要處理每個(gè)成員
        // ...
    }
}

// 定義一個(gè)函數(shù)來(lái)讀取結(jié)構(gòu)體數(shù)組
void ReadStructArray(uint16_t IAP_ADDRESS) {
    for (int index = 0; index < 100; index++) {
        // 假設(shè)IAPreadbyte是讀取單個(gè)字節(jié)的函數(shù)
        myArray[index].c = IAPreadbyte(IAP_ADDRESS++);
        myArray[index].i = (IAPreadbyte(IAP_ADDRESS++) << 8) | IAPreadbyte(IAP_ADDRESS++);
        // 注意:位字段需要特殊處理,這里只是一個(gè)示例
        myArray[index].bitField = (IAPreadbyte(IAP_ADDRESS++) >> 7) & 0x01;
        myArray[index].anotherField = (IAPreadbyte(IAP_ADDRESS++) >> 5) & 0x07;
    }
}

// 定義一個(gè)函數(shù)來(lái)寫入結(jié)構(gòu)體數(shù)組
void WriteStructArray(uint16_t IAP_ADDRESS) {
    for (int index = 0; index < 100; index++) {
        // 假設(shè)IAPwritebyte是寫入單個(gè)字節(jié)的函數(shù)
        IAPwritebyte(IAP_ADDRESS++, myArray[index].c);
        IAPwritebyte(IAP_ADDRESS++, myArray[index].i >> 8);
        IAPwritebyte(IAP_ADDRESS++, myArray[index].i & 0xFF);
        // 注意:位字段需要特殊處理,這里只是一個(gè)示例
        IAPwritebyte(IAP_ADDRESS++, (myArray[index].bitField << 7) | (myArray[index].anotherField << 4));
    }
}
在這個(gè)示例中,我們定義了一個(gè)包含字符、整數(shù)和位字段的MyStruct結(jié)構(gòu)體。然后,我們定義了一個(gè)包含100個(gè)這種結(jié)構(gòu)體的數(shù)組myArray。

在TraverseStructArray函數(shù)中,我們使用一個(gè)循環(huán)來(lái)遍歷數(shù)組中的每個(gè)結(jié)構(gòu)體,并訪問(wèn)其成員。

在ReadStructArray和WriteStructArray函數(shù)中,我們使用循環(huán)來(lái)讀取或?qū)懭虢Y(jié)構(gòu)體數(shù)組。對(duì)于位字段,我們需要特別注意,因?yàn)樗鼈儾皇菃为?dú)的字節(jié),而是共享同一個(gè)字節(jié)的不同位。在這個(gè)示例中,我們假設(shè)IAPreadbyte和IAPwritebyte是讀取和寫入單個(gè)字節(jié)的函數(shù)。

回復(fù)

使用道具 舉報(bào)

9#
ID:86421 發(fā)表于 2024-10-2 08:13 | 只看該作者
1qaz2wsx77 發(fā)表于 2024-10-1 18:04
第二個(gè)存儲(chǔ)的問(wèn)題已經(jīng)明白了,感謝。第一個(gè)問(wèn)題其實(shí)是一個(gè)雙色3264點(diǎn)陣屏的,我想做一個(gè)配色,按鍵調(diào)整。 ...

第一個(gè)問(wèn)題已解決。uchar  (*X)[8];改為uchar  *X;就可以了。
指針與數(shù)組的關(guān)系 當(dāng)一個(gè)指針變量被初始化成數(shù)組名時(shí),就說(shuō)該指針變量指向了數(shù)組。如: char str[20], *ptr;
ptr=str;
ptr 被置為數(shù)組 str 的第一個(gè)元素的地址,因?yàn)閿?shù)組名就是該數(shù)組的首地址, 也是數(shù)組第一個(gè)元素的地址。此時(shí)可以認(rèn)為指針 ptr 就是數(shù)組 str(反之不成立), 這樣原來(lái)對(duì)數(shù)組的處理都可以用指針來(lái)實(shí)現(xiàn)。如對(duì)數(shù)組元素的訪問(wèn),既可以用下 標(biāo)變量訪問(wèn),也可以用指針訪問(wèn)。
回復(fù)

使用道具 舉報(bào)

10#
ID:161164 發(fā)表于 2024-10-2 09:03 | 只看該作者
1qaz2wsx77 發(fā)表于 2024-10-1 18:04
第二個(gè)存儲(chǔ)的問(wèn)題已經(jīng)明白了,感謝。第一個(gè)問(wèn)題其實(shí)是一個(gè)雙色3264點(diǎn)陣屏的,我想做一個(gè)配色,按鍵調(diào)整。 ...

因?yàn)樗N的是AI答案,專坑新手
  1. void display1(void)
  2. {
  3.         uchar  *X;
  4.         if(pc==0) X=RD1;
  5.         if(pc==1) X=GD1;
  6.        
  7.         X[0]=SZG[hour/10][row];
  8.         X[1]=SZG[hour%10][row];
  9.        
  10.         if(SHAN) X[2]=TABS[10][row];
  11.         else X[2]=TABS[11][row];
  12.        
  13.         X[3]=SZG[min/10][row];
  14.         X[4]=SZG[min%10][row];
  15.        
  16.         if(SHAN) X[5]=TABS[10][row];
  17.         else X[5]=TABS[11][row];
  18.        
  19.         X[6]=SZG[sec/10][row];
  20.         X[7]=SZG[sec%10][row];
  21. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

11#
ID:1128898 發(fā)表于 2024-10-2 14:00 | 只看該作者
指針唄,緩沖區(qū)域數(shù)組多維,然后內(nèi)核線程邏輯雙開(kāi)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产综合av| 精品亚洲二区 | 91av在线免费播放 | 岛国av一区二区三区 | 99久久精品国产一区二区三区 | 中文字幕 在线观看 | 欧美精品tv | 亚洲国产精品99久久久久久久久 | 日韩国产在线观看 | 国产日韩欧美精品一区二区三区 | 亚洲二区在线 | 国产精品1区 | 国产精品视频播放 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 国产高清在线精品一区二区三区 | 午夜羞羞 | 日韩久久久久久久久久久 | 亚洲高清视频一区 | 亚洲免费在线观看av | 丝袜 亚洲 另类 欧美 综合 | 国产欧美视频一区二区三区 | 国产一区二区不卡 | 中文字幕一区在线观看视频 | 国产精品视频久久久久久 | 日韩福利 | 羞羞网站免费 | 精品久久久久久亚洲精品 | 五月天综合影院 | 国产精品极品美女在线观看免费 | 涩爱av一区二区三区 | 久久精品成人 | 国产精品视频免费观看 | 手机看片在线播放 | 天天草天天射 | 黄色片免费看 | 国产精品久久9 | 一级片在线观看 | 视频一区在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美第一页| 中文字幕 亚洲一区 |