c

时间:2018-08-21 11:20:22

标签: c

我可以使用C的嵌入式软件。

我正在从EEPROM中读取电路板的当前版本。

基于该修订号,可以定义负载的最大支持电流。

现在,我需要代码中很多位置上的信息(但为只读)。 仅允许读取EEPROM的功能写入该值。 所有其他功能等不得更改该值,否则可能导致错误 损坏负载或电路板。

c中有办法做到这一点吗? (不是C ++)

3 个答案:

答案 0 :(得分:9)

对于简单的单核嵌入式系统,这是通过在EEPROM驱动程序的文件范围内声明变量static来完成的,例如:

static uint16_t max_current;

驱动程序随后可以直接访问它,但是static阻止任何其他模块访问它。通过在同一驱动程序中提供getter函数,可以为它们提供只读访问权限:

uint16_t get_max_current (void)
{
  return max_current;
}

答案 1 :(得分:4)

如果您使用具有静态局部功能的函数,并在首次使用时直接从EEPROM进行分配,则此后将返回先前初始化的值,而无需重新读取EEPROM。

类似的东西(修改EEPROM的读数以适合您的实际接口)

int getBoardRevsion( void )
{
    static int board_revision = -1 ;
    if( board_revision == -1 )
    {
        board_revision = (int)readEeprom( BOARD_REVISION_OFFSET, 1) ;
    }

    return board_revision ;
}

board_revisiongetBoardRevsion()以外的所有用户都是完全私有的,而严格的只读访问是通过该函数强制执行的。

答案 2 :(得分:3)

使用获取/设置功能。它们也是一个很好的约定。例如(不包括头文件):

eeprom.c:

static uint16_t value = 0;

void eeprom_init(void){
    value = ...;
}

uint16_t get_EEPROM_value(void){return value;}

something_else.c:

#include "eeprom.h"

int main(void){
    if(get_EEPROM_value() == ...){...}
}