模块: process
约 2426 字大约 8 分钟
2024-05-03
构建固件和导入到JS
process是一个内置 module,构建固件时不需要在 C++ 中 use 引入。
该 module 在 JS 中不需要 import,可通过全局变量
process访问
简介
系统功能模块, 命名为 process 是为了和 nodejs 的习惯一致
模块函数
函数 reboot
原型: reboot ()
重启系统
立即重启设备。注意:此操作会终止当前运行的所有程序!
示例:
import * as process from "process"
// 简单重启
process.reboot()
// 延迟重启(给日志保存等操作留出时间)
setTimeout(() => {
process.reboot()
}, 1000)返回值:
类型undefined
函数 getMac
原型: getMac (phy:"wifi"|"wifi.ap"|"wifi.softap"|"ble"|"eth"|"base"|"efuse"|"efuse.factory"|"efuse.customer"|"efuse.ext"="wifi", format:bool=false)
读取硬件 MAC 地址
读取设备的 MAC 地址。
示例:
import * as process from "process"
// 读取 WiFi STA MAC 地址(默认)
const mac = process.getMac()
console.log("MAC:", mac)
// 读取 WiFi AP MAC 地址
const apMac = process.getMac("wifi.ap")
console.log("AP MAC:", apMac)
// 读取蓝牙 MAC 地址
const btMac = process.getMac("bt")
console.log("BT MAC:", btMac)
// 格式化为十六进制字符串
const macStr = process.getMac("wifi", true)
console.log("MAC string:", macStr) // "aa:bb:cc:dd:ee:ff"参数:
phy
类型"wifi", "wifi.ap", "wifi.softap", "ble", "eth", "base", "efuse", "efuse.factory", "efuse.customer", "efuse.ext"
默认值"wifi"
参数说明要读取的硬件类型
format
类型bool
默认值false
参数说明返回格式,false返回ArrayBuffer,true返回十六进制字符串
返回值:
类型ArrayBuffer, string
说明MAC 地址
函数 setMac
原型: setMac (macAddr:string|ArrayBuffer|Uint8Array)
设置硬件地址
参数:
macAddr
类型string, ArrayBuffer, Uint8Array
参数说明MAC地址,可以是字符串格式"xx:xx:xx:xx:xx:xx"、6字节的ArrayBuffer或6字节的Uint8Array
返回值:
类型undefined
函数 readEFUSE
原型: readEFUSE (field:number)
从一次性写入区(只读区) efuse 读取数据
ESP32 一共8个32位寄存器共自定义使用
参数:
field
类型number
参数说明要读取的 efuse 块和位,范围 0-7
异常:
- field 必须在 0-7 范围内
返回值:
类型number
说明读取到的 efuse 数据 (32位整数)
函数 usage
原型: usage ()
内存使用情况
返回系统内存使用情况的详细信息。
示例:
import * as process from "process"
// 获取内存使用情况
const mem = process.usage()
console.log("Heap free:", mem.heap.free)
console.log("Heap used:", mem.heap.used)
console.log("Heap total:", mem.heap.total)
// 计算内存使用率
const heapUsage = (mem.heap.used / mem.heap.total * 100).toFixed(2)
console.log("Heap usage:", heapUsage + "%")
// 检查 PSRAM(如果可用)
if (mem.psram.total > 0) {
console.log("PSRAM free:", mem.psram.free)
}
// 监控内存泄漏
setInterval(() => {
const u = process.usage()
console.log("Heap used:", u.heap.used)
}, 10000)返回值:
类型object (详见下方类型定义)
说明内存使用情况对象
返回值类型定义:
{
heap: {
total:number, // 总内存大小
used:number, // 已用内存大小
free:number // 剩余内存大小
},
psram: {
total:number, // PSRAM 总大小
used:number, // PSRAM 已用大小
free:number // PSRAM 剩余大小
},
dma: {
total:number, // DMA 内存总大小
used:number, // DMA 内存已用大小
free:number // DMA 内存剩余大小
}
}函数 sleep
原型: sleep (ms:number)
同步延时函数
这是一个同步函数,不需要 await 或 Promise.then()
阻塞当前任务指定的毫秒数。注意:这会阻塞 JavaScript 执行!
示例:
import * as process from "process"
// 延时 1 秒
console.log("Start")
process.sleep(1000)
console.log("After 1 second")
// 用于简单的轮询
while (!checkCondition()) {
process.sleep(100) // 每 100ms 检查一次
}
// 注意:非阻塞延时请使用 setTimeout
setTimeout(() => console.log("Non-blocking delay"), 1000)参数:
ms
类型number
参数说明延时时间,单位为毫秒
返回值:
类型undefined
函数 setTime
原型: setTime (ms:number)
设置系统时间
设置设备的系统时间(UNIX 时间戳)。
示例:
import * as process from "process"
// 设置当前时间
const now = Date.now()
process.setTime(now)
// 从 NTP 服务器同步时间(如果有网络)
// 注意:实际 NTP 同步需要额外的网络代码参数:
ms
类型number
参数说明UNIX时间戳,单位为毫秒
返回值:
类型undefined
函数 setTimezoneOffset
原型: setTimezoneOffset (minute:number)
设置系统时区时间偏置(分钟)
设置设备的时区偏移量。
示例:
import * as process from "process"
// 设置时区为东八区(北京时间)
process.setTimezoneOffset(8 * 60)
// 设置时区为 UTC(格林威治时间)
process.setTimezoneOffset(0)
// 设置时区为西五区(纽约时间)
process.setTimezoneOffset(-5 * 60)
// 获取当前时区偏移
const offset = new Date().getTimezoneOffset()
console.log("Timezone offset:", offset, "minutes")参数:
minute
类型number
参数说明时间偏置分钟
返回值:
类型undefined
函数 gc
原型: gc ()
运行垃圾回收
强制运行 JavaScript 垃圾回收器。
示例:
import * as process from "process"
// 手动触发垃圾回收
console.log("Before GC:", process.usage().heap.used)
process.gc()
console.log("After GC:", process.usage().heap.used)
// 定期垃圾回收(谨慎使用)
// setInterval(() => process.gc(), 60000)返回值:
类型undefined
函数 ref
原型: ref (obj:object)
获取对象引用计数
参数:
obj
类型object
参数说明要检查的对象(可选)
返回值:
类型number
说明引用计数
函数 getRunningTime
原型: getRunningTime ()
获取系统运行时间(毫秒)
返回设备从上电开始的运行时间。
示例:
import * as process from "process"
// 获取运行时间
const uptime = process.getRunningTime()
console.log("Uptime:", uptime, "ms")
console.log("Uptime:", (uptime / 1000).toFixed(2), "seconds")
console.log("Uptime:", (uptime / 60000).toFixed(2), "minutes")
// 计算操作耗时
const start = process.getRunningTime()
doSomething()
const elapsed = process.getRunningTime() - start
console.log("Elapsed:", elapsed, "ms")返回值:
类型number
说明系统运行时间(毫秒)
函数 getChipTemperature
原型: getChipTemperature ()
获取芯片温度
读取 ESP32 芯片的内部温度传感器。
示例:
import * as process from "process"
// 读取芯片温度
const temp = process.getChipTemperature()
console.log("Chip temperature:", temp, "°C")
// 温度监控
setInterval(() => {
const t = process.getChipTemperature()
if (t > 80) {
console.warn("High temperature warning:", t, "°C")
}
}, 30000) // 每 30 秒检查一次异常:
- 温度传感器不支持
返回值:
类型number
说明摄氏度温度
函数 resetReason
原型: resetReason ()
芯片复位原因
返回设备上次复位的原因。
示例:
import * as process from "process"
// 获取复位原因
const reason = process.resetReason()
console.log("Reset reason:", reason)
// 根据复位原因执行不同操作
switch(reason) {
case "power-on":
console.log("Power on reset")
break
case "soft-reset":
console.log("Software reset")
break
case "watchdog":
console.warn("Watchdog timeout!")
break
case "panic":
console.error("System panic!")
break
}返回值:
类型string
说明复位原因字符串
函数 top
原型: top ()
返回各个任务执行的情况
需要配置 FreeRTOS 的以下选项:
- CONFIG_FREERTOS_USE_TRACE_FACILITY
- CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
- CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
返回值:
类型string
函数 cpuCount
原型: cpuCount ()
返回 CPU 数量
示例:
import * as process from "process"
const cpus = process.cpuCount()
console.log("CPU count:", cpus)返回值:
类型number
说明CPU 核心数
函数 tasks
原型: tasks (core:number=0)
返回各个任务执行的情况
示例:
import * as process from "process"
// 获取 CPU 0 上的任务
const tasks = process.tasks(0)
console.log("Tasks on CPU 0:", tasks)
// 获取 CPU 1 上的任务(双核芯片)
if (process.cpuCount() > 1) {
const tasks1 = process.tasks(1)
console.log("Tasks on CPU 1:", tasks1)
}需要配置 FreeRTOS 的以下选项:
- CONFIG_FREERTOS_USE_TRACE_FACILITY
参数:
core
类型number
默认值0
参数说明CPU 核心编号
返回值:
类型string[] 任务名称列表
