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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教程序簡化及STC15單片機(jī)eeprom存儲的問題?

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

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

使用道具 舉報

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

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

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

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

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

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

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

// 定義一個變量來存儲數(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]);
    }
}
在這個示例中,我們定義了一個MyData結(jié)構(gòu)體來存儲8個變量。然后,我們定義了一個myData變量來存儲數(shù)據(jù)。在ReadData函數(shù)中,我們逐個字節(jié)地讀取EEPROM中的數(shù)據(jù),并將其存儲到myData中。在WriteData函數(shù)中,我們逐個字節(jié)地將myData中的數(shù)據(jù)寫入EEPROM。

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

使用道具 舉報

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

c

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

使用道具 舉報

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

使用道具 舉報

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

c

第二個存儲的問題已經(jīng)明白了,感謝。第一個問題其實是一個雙色3264點(diǎn)陣屏的,我想做一個配色,按鍵調(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];
}

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

回復(fù)

使用道具 舉報

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

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

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

EEPROM_Data eData;
回復(fù)

使用道具 舉報

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

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

使用道具 舉報

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

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

c
#include <stdint.h>

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

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

// 定義一個函數(shù)來遍歷結(jié)構(gòu)體數(shù)組
void TraverseStructArray() {
    for (int index = 0; index < 100; index++) {
        // 訪問每個結(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ù)需要處理每個成員
        // ...
    }
}

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

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

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

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

回復(fù)

使用道具 舉報

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

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

使用道具 舉報

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

因為他貼的是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ù)

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精彩视频 | 日批日韩在线观看 | www.国产精| 99视频在线免费观看 | 免费欧美视频 | 国产二区视频 | 亚洲一区二区久久 | 香蕉一区| 青青久久 | 81精品国产乱码久久久久久 | 精品国产乱码一区二区三区a | av在线免费观看网站 | 欧美一区二区三区精品 | 成人三级视频在线观看 | 亚洲国产网 | 国产精品久久亚洲7777 | 日韩有码一区 | 91av在线看| 九九成人 | 色在线看 | 欧美精品一区二区三区在线四季 | 91婷婷韩国欧美一区二区 | 极品国产视频 | 久草中文网| 色屁屁在线观看 | 日韩中文视频 | www.亚洲一区| 亚洲精品在线免费观看视频 | 亚洲乱码一区二区三区在线观看 | 九九爱这里只有精品 | 蜜臀久久99精品久久久久野外 | 久久久久国产精品免费免费搜索 | 国产精品一区二区不卡 | 欧美精品福利 | 久久国产传媒 | 成人毛片视频免费 | 免费成人高清 | 91视频在线 | 久久亚洲欧美日韩精品专区 | 91麻豆精品国产91久久久资源速度 | 羞羞色网站 |