我可以使用C的嵌入式软件。
我正在从EEPROM中读取电路板的当前版本。
基于该修订号,可以定义负载的最大支持电流。
现在,我需要代码中很多位置上的信息(但为只读)。 仅允许读取EEPROM的功能写入该值。 所有其他功能等不得更改该值,否则可能导致错误 损坏负载或电路板。
c中有办法做到这一点吗? (不是C ++)
答案 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_revision
对getBoardRevsion()
以外的所有用户都是完全私有的,而严格的只读访问是通过该函数强制执行的。
答案 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() == ...){...}
}