您的位置首页 >半导体 >

飞凌 ElfBoard 开发板基础编程数据类型、条件判断(C 语言,Linux 应用编程)

ElfBoard 是飞凌面向嵌入式教学的开发板(ELF1/ELF-RK3506/ELF2 等),跑 Linux,入门最常用 C 语言做应用开发;数据类型决定变量占内存大小、能存什么值,条件判断用来做 GPIO、ADC、传感器的分支逻辑,是板上 LED、按键、温感采集实验的基础,新手容易踩无符号数比较、溢出、类型隐式转换的坑。

一、ElfBoard C 语言常用数据类型

嵌入式开发要重点关心占用字节、取值范围、有无符号,直接影响采集、控制、串口上传。

类型占用字节说明ElfBoard 典型用途
char1字符 / 8 位整数,signed -128~127;unsigned 0~255串口单字节收发、IO 状态、简单标志位
short216 位整型小范围传感器数值
int432 位整型(A7 架构),最常用计数、按键次数、ADC 原始值
long4/8取决于系统,Linux 下 32 位是 4,64 位 8长计时、大数值
long long864 位整型高精度计时、大流量统计
float4单精度浮点温湿度、电压换算(ADC 转电压)
double8双精度浮点高精度算法,NPU 推理计算
uint8_t / uint16_t / uint32_t固定 1/2/4stdint.h 标准固定宽度类型,推荐嵌入式优先用寄存器、协议、ADC、CAN、串口数据包(跨平台不踩坑)

重点提示:ElfBoard Linux 应用开发,优先 stdint.h 固定宽度类型,不要依赖 int、short 的不确定长度,后期移植驱动、通信协议不会乱。

二、条件判断语法(C 语言)

核心:if / if-else / if-else if / switch,搭配比较运算符、逻辑运算符。

  1. 基础 if

if(条件)

{

// 条件成立执行

}

  1. if-else

if(adc_val > 1800)

{

// 电压高,点亮LED

}

else

{

// 熄灭LED

}

  1. 多分支 if-else if

if(temp < 25)

{

}

else if(temp < 30)

{

}

else

{

}

  1. switch(适合固定离散值,按键、模式选择)

switch(key_val)

{

case 1: break;

case 2: break;

default: break;

}

运算符:

  • 比较:> < >= <= == !=
  • 逻辑:&&与 ||或 !非

⚠️ 高频坑:== 不要写成 =;无符号数不能判断小于 0;浮点不要直接 == 判断相等。

三、ElfBoard 板上实战示例(ADC 采集 + 条件判断控制 LED)

include

include

int main(void)

{

uint32_t adc_raw; // 固定宽度无符号,ADC原始值

float vol;

adc_raw = get_adc(); // 读取板载ADC,ElfBoard配套封装函数

vol = adc_raw 3.3f / 4095.0f;

if(vol > 2.5f)

{

led_set(1); // 高电平点亮

}

else if(vol < 1.0f)

{

led_set(0);

}

else

{

printf("电压中等\r\n");

}

return 0;

}

这个逻辑就是 ElfBoard 经典实验:电位器调节 ADC,根据电压区间分支控制 LED。

四、嵌入式专属易错点(ElfBoard 实验高频)

  1. 隐式类型转换:uint32 和 int 比较,int 自动转无符号,负数会变成超大正数,判断失效。
  2. 浮点精度:ADC 换算出来的 float,不能写 if(vol == 2.5),要用区间 if(fabs(vol-2.5) < 0.01)。
  3. 寄存器类型:操作外设寄存器,必须用uint8_t/uint32_t,不能用有符号 int,防止符号扩展出错。
  4. 条件判断里的延时阻塞:if 里面直接 sleep,会卡住整个程序;工业 / 物联网项目建议状态机替代长延时。

五、学习顺序建议

  1. 先分清 char、int、uint32_t、float,在 ElfBoard 串口打印 sizeof 看实际字节
  2. 写简单 if 判断,读取按键 GPIO 电平分支
  3. ADC 采集 + 浮点换算 + 区间判断,做电位器控制 LED
  4. switch 做多按键模式切换
  5. 进阶:状态机,替代大量 if-else 嵌套(适合传感器多任务)

【相关 FAQ】

问题 1:ElfBoard 做 C 语言编程,数据类型为什么优先用 stdint.h 的 uint32_t 而不是 int?

回答 1:ElfBoard 是 Linux ARM 平台,int 长度固定但跨平台不确定;uint32_t 是标准固定宽度,操作 ADC、寄存器、串口数据包、CAN 协议时,不会因为平台变化导致字节长度错乱,嵌入式开发更安全。

问题 2:ElfBoard 条件判断写 ADC 电压,为什么不能直接用 == 判断浮点数?

回答 2:float 存在精度误差,ADC 换算后的电压是近似值,直接 == 大概率永远不触发;正确做法是用差值小于一个很小阈值做区间判断。

问题 3:ElfBoard 无符号 uint 变量做条件判断,能不能判断小于 0?

回答 3:不能,uint 系列最小值就是 0,if(x < 0)永远为假,是新手在 ADC、IO 实验里最常见 bug。

问题 4:ElfBoard 条件判断 if 和 switch 怎么选?

回答 4:连续范围判断(电压、温度)用 if-else if;固定离散值(按键编号、模式码)用 switch,代码可读性更好。

【参考资料】

[2026-10-01] ElfBoard 官网 ELF1 C 语言基础教程

[2026-09-12] ElfBoard ELF-RK3506 Linux 应用编程手册

[2026-08-20] 飞凌 ElfBoard ADC、GPIO 实验例程文档

[2026-07-05] stdint.h 嵌入式固定宽度类型规范

【免责声明】

本文是 ElfBoard Linux 应用 C 语言入门教程,驱动内核编程、Python 开发语法会有差异;实际编译、GPIO/ADC 函数以你手上 ELF1/ELF-RK3506 配套 SDK 和例程为准。

如果你想要,我可以给你一份可直接在 ElfBoard 上编译运行的【按键 + ADC + 条件判断完整工程代码】。