当前位置: 首页 > news >正文

Lv驱动库底层实际使用 Q8定点及其定点实现

目录

一、定点化

二、数据节点规划

三、Lv Q8定点计算代码实现

四、数据线性插值


  • ISP Pipeline中Lv实现方式探究之一
  • ISP Pipeline中Lv实现方式探究之二
  • ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
  • ISP Pipeline中Lv实现方式探究之四----正LV值定点实现

一、定点化

如上博文,都是讲解了Lv计算的基本原理。实际在ISP驱动中该如何根据上述原理进行Lv值的计算呢?

LV = log₂(1/(T·Gain)) + Lv_Offset
其中,T表示秒为单位的曝光时间,Gain为总的增益倍数,Lv_offset=8

LV计算定点化之前的公式

ISP驱动库内部对应的增益倍数也不能使用小数,LV在ISP驱动块中显然也不能使用浮点数。因此,都需要做相应的定点化处理。假设都做Q8得定点化处理。即,上式改写为:

LV = log2(X) - log2(A_Q8 /256) - log2(D_Q8/256) - log2(I_Q8/256) + 8

LV = log2(X) - ( log2(A_Q8) - 8 ) - ( log2(D_Q8) - 8 ) - ( log2(I_Q8) - 8 ) + 8
LV = log2(X) - log2(A_Q8) - log2(D_Q8) - log2(I_Q8) + 32

LV_Q8 = log2X_Q8 - log2A_Q8 - log2D_Q8 - log2I_Q8 + 32*256

二、数据节点规划

曝光时间节点划分为:1/512,1/256,1/128,1/64,1/32,1/16,1/8,1/4秒;支持最低帧率5帧,支持最小曝光时间为1/512=0.001953125s。小于1/512即为较亮场景的,可以直接限制为1/512s。

增益节点划分:一般普通的sensor模拟增益相对较大,数字增益倍数相对较小。我们以模拟增益128倍为增益节点的上限。以1X,2X,4X,8X,16X,32X,64X,128X为增益节点。

由于增益是按照总的增益倍数,因此,我们只需要支持最大模拟增益即可,数字增益和ISP增益倍数一般都小于128倍。总的增益可以支持512X,当时单个增益最大倍数为128X。

三、Lv Q8定点计算代码实现

3.1 迭代版本1

考虑到LV_Q8 = log2X_Q8 - log2A_Q8 - log2D_Q8 - log2I_Q8 + 32*256公式中,X最大值为512,即规划一个计算好的log2对数Q8定点查找表实现曝光时间的计算。这样同时也能够计算2倍增益Q8定点数据。考虑到大于2X增益的计算,使用二项多项式拟合定点计算计算得到。

具体实现实例代码为:

//使用二阶多项式拟合log2函数 // ==================== 固定配置 ==================== #define Q8 256 // Q8 定点格式 #define LV_OFFSET (32 * Q8) // 固定偏移 +32 #define MAX_INPUT 512 // X/A/D/I 最大值 #define MIN_X 4 // 曝光 X 最小值4 #define MAX_GAIN (128*Q8) uint16_t log2_x256_fast(uint16_t x) { uint8_t k; // 处理 f=2.0 越界问题 if (x == 32768) { return 3840; } if (x >= 16384) k = 14; else if (x >= 8192) k = 13; else if (x >= 4096) k = 12; else if (x >= 2048) k = 11; else if (x >= 1024) k = 10; else k = 9; // 归一化到 [256, 512] Q8 uint16_t f_q8 = (k == 15) ? 512 : (x >> (k - 8)); int16_t d = f_q8 - 256; int16_t d2 = (int16_t)(((int32_t)d * d) >> 8); // 二阶多项式高精度近似 int32_t logf_q8 = ((int32_t)d * 369 >> 8) - ((int32_t)d2 * 185 >> 8); // 最终 Q8 结果 return (uint16_t)((k << 8) + logf_q8); } // ============================================== // log2(x) Q8 查表 (0~512) // ============================================== const uint16_t log2_q8_lut[MAX_INPUT + 1] = { 0, 0, 256, 406, 512, 594, 662, 719, 768, 812, 850, 886, 918, 947, 975, 1000, 1024, 1046, 1068, 1087, 1106, 1124, 1142, 1158, 1174, 1189, 1203, 1217, 1231, 1244, 1256, 1268, 1280, 1291, 1302, 1313, 1324, 1334, 1343, 1353, 1362, 1372, 1380, 1389, 1398, 1406, 1414, 1422, 1430, 1437, 1445, 1452, 1459, 1466, 1473, 1480, 1487, 1493, 1500, 1506, 1512, 1518, 1524, 1530, 1536, 1542, 1547, 1553, 1558, 1564, 1569, 1574, 1580, 1585, 1590, 1595, 1599, 1604, 1609, 1614, 1618, 1623, 1628, 1632, 1636, 1641, 1645, 1649, 1654, 1658, 1662, 1666, 1670, 1674, 1678, 1682, 1686, 1690, 1693, 1697, 1701, 1705, 1708, 1712, 1715, 1719, 1722, 1726, 1729, 1733, 1736, 1739, 1743, 1746, 1749, 1752, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1803, 1806, 1809, 1812, 1814, 1817, 1820, 1822, 1825, 1828, 1830, 1833, 1836, 1838, 1841, 1843, 1846, 1848, 1851, 1853, 1855, 1858, 1860, 1863, 1865, 1867, 1870, 1872, 1874, 1877, 1879, 1881, 1884, 1886, 1888, 1890, 1892, 1895, 1897, 1899, 1901, 1903, 1905, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946, 1947, 1949, 1951, 1953, 1955, 1957, 1959, 1961, 1962, 1964, 1966, 1968, 1970, 1971, 1973, 1975, 1977, 1978, 1980, 1982, 1984, 1985, 1987, 1989, 1990, 1992, 1994, 1995, 1997, 1999, 2000, 2002, 2004, 2005, 2007, 2008, 2010, 2012, 2013, 2015, 2016, 2018, 2020, 2021, 2023, 2024, 2026, 2027, 2029, 2030, 2032, 2033, 2035, 2036, 2038, 2039, 2041, 2042, 2044, 2045, 2047, 2048, 2049, 2051, 2052, 2054, 2055, 2057, 2058, 2059, 2061, 2062, 2064, 2065, 2066, 2068, 2069, 2070, 2072, 2073, 2074, 2076, 2077, 2078, 2080, 2081, 2082, 2084, 2085, 2086, 2088, 2089, 2090, 2092, 2093, 2094, 2095, 2097, 2098, 2099, 2100, 2102, 2103, 2104, 2105, 2107, 2108, 2109, 2110, 2111, 2113, 2114, 2115, 2116, 2117, 2119, 2120, 2121, 2122, 2123, 2125, 2126, 2127, 2128, 2129, 2130, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2246, 2247, 2248, 2249, 2250, 2251, 2251, 2252, 2253, 2254, 2255, 2256, 2256, 2257, 2258, 2259, 2260, 2260, 2261, 2262, 2263, 2264, 2264, 2265, 2266, 2267, 2268, 2268, 2269, 2270, 2271, 2272, 2272, 2273, 2274, 2275, 2276, 2276, 2277, 2278, 2279, 2279, 2280, 2281, 2282, 2282, 2283, 2284, 2285, 2286, 2286, 2287, 2288, 2289, 2289, 2290, 2291, 2292, 2292, 2293, 2294, 2295, 2295, 2296, 2297, 2297, 2298, 2299, 2300, 2300, 2301, 2302, 2303, 2303, 2304, }; // ============================================== // 【ISP LV 计算】曝光最小 1/512 秒 // 输入 : X 曝光=1/X 秒 (X >= 512) // 输出 : LV_Q8 // ============================================== uint16_t calc_lv_final(uint16_t X, uint16_t A_Q8, uint16_t D_Q8, uint16_t I_Q8) { int32_t lv_result; uint16_t logX, logA, logD, logI; // ================= 关键修正:曝光 X 最小 = 512 ================= if (X < MIN_X) X = MIN_X; // 强制最小 1/512s if (X > MAX_INPUT) X = MAX_INPUT; // 增益边界不变 if (A_Q8 > MAX_GAIN) A_Q8 = MAX_GAIN; if (D_Q8 > MAX_GAIN) D_Q8 = MAX_GAIN; if (I_Q8 > MAX_GAIN) I_Q8 = MAX_GAIN; // 查表 logX = log2_q8_lut[X]; logA = log2_x256_fast(A_Q8); logD = log2_x256_fast(D_Q8); logI = log2_x256_fast(I_Q8); // 公式不变 lv_result = (int32_t)logX - logA - logD - logI + LV_OFFSET; // 钳位 if (lv_result < 256) lv_result = 256; if (lv_result > 512 * Q8) lv_result = (512 * Q8); return (uint16_t)lv_result; }

实际结果对比,以下为误差较大的数据对比。估算值和excel计算值最大相差71。

3.2 迭代版本2

由迭代版本1结果可知,log2_x256_fast(uint16_t x)计算精度相对还是较大,因此使用三项多项式拟合定点计算提高计算精度。

具体实现实例代码为:

//使用三阶多项式拟合log2函数 // ==================== 固定配置 ==================== #define Q8 256 // Q8 定点格式 #define LV_OFFSET (32 * Q8) // 固定偏移 +32 #define MAX_INPUT 512 // X/A/D/I 最大值 #define MIN_X 4 // 曝光 X 最小值 #define MAX_GAIN (128*Q8) uint16_t log2_x256_fast(uint16_t x) { // 处理 f=2.0 越界问题 if (x == 32768) { return 3840; } uint8_t k; //if (x >= 32768) k = 15; if (x >= 16384) k = 14; else if (x >= 8192) k = 13; else if (x >= 4096) k = 12; else if (x >= 2048) k = 11; else if (x >= 1024) k = 10; else k = 9; // 归一化到 [256, 512] Q8 uint16_t f_q8 = (k == 15) ? 512 : (x >> (k - 8)); int32_t d = f_q8 - 256; int32_t d2 = (int16_t)(((int32_t)d * d) >> 8); int32_t d3 = (d2*d) >> 8; // 三阶多项式高精度近似 int32_t logf_q8 = ((int32_t)d * 369 >> 8) - ((int32_t)d2 * 185 >> 8) + (d3 * 85 >> 8); // 最终 Q8 结果 return (int32_t)((k << 8) + logf_q8); } // ============================================== // log2(x) Q8 查表 (0~512) // ============================================== const uint16_t log2_q8_lut[MAX_INPUT + 1] = { 0, 0, 256, 406, 512, 594, 662, 719, 768, 812, 850, 886, 918, 947, 975, 1000, 1024, 1046, 1068, 1087, 1106, 1124, 1142, 1158, 1174, 1189, 1203, 1217, 1231, 1244, 1256, 1268, 1280, 1291, 1302, 1313, 1324, 1334, 1343, 1353, 1362, 1372, 1380, 1389, 1398, 1406, 1414, 1422, 1430, 1437, 1445, 1452, 1459, 1466, 1473, 1480, 1487, 1493, 1500, 1506, 1512, 1518, 1524, 1530, 1536, 1542, 1547, 1553, 1558, 1564, 1569, 1574, 1580, 1585, 1590, 1595, 1599, 1604, 1609, 1614, 1618, 1623, 1628, 1632, 1636, 1641, 1645, 1649, 1654, 1658, 1662, 1666, 1670, 1674, 1678, 1682, 1686, 1690, 1693, 1697, 1701, 1705, 1708, 1712, 1715, 1719, 1722, 1726, 1729, 1733, 1736, 1739, 1743, 1746, 1749, 1752, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1803, 1806, 1809, 1812, 1814, 1817, 1820, 1822, 1825, 1828, 1830, 1833, 1836, 1838, 1841, 1843, 1846, 1848, 1851, 1853, 1855, 1858, 1860, 1863, 1865, 1867, 1870, 1872, 1874, 1877, 1879, 1881, 1884, 1886, 1888, 1890, 1892, 1895, 1897, 1899, 1901, 1903, 1905, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946, 1947, 1949, 1951, 1953, 1955, 1957, 1959, 1961, 1962, 1964, 1966, 1968, 1970, 1971, 1973, 1975, 1977, 1978, 1980, 1982, 1984, 1985, 1987, 1989, 1990, 1992, 1994, 1995, 1997, 1999, 2000, 2002, 2004, 2005, 2007, 2008, 2010, 2012, 2013, 2015, 2016, 2018, 2020, 2021, 2023, 2024, 2026, 2027, 2029, 2030, 2032, 2033, 2035, 2036, 2038, 2039, 2041, 2042, 2044, 2045, 2047, 2048, 2049, 2051, 2052, 2054, 2055, 2057, 2058, 2059, 2061, 2062, 2064, 2065, 2066, 2068, 2069, 2070, 2072, 2073, 2074, 2076, 2077, 2078, 2080, 2081, 2082, 2084, 2085, 2086, 2088, 2089, 2090, 2092, 2093, 2094, 2095, 2097, 2098, 2099, 2100, 2102, 2103, 2104, 2105, 2107, 2108, 2109, 2110, 2111, 2113, 2114, 2115, 2116, 2117, 2119, 2120, 2121, 2122, 2123, 2125, 2126, 2127, 2128, 2129, 2130, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2246, 2247, 2248, 2249, 2250, 2251, 2251, 2252, 2253, 2254, 2255, 2256, 2256, 2257, 2258, 2259, 2260, 2260, 2261, 2262, 2263, 2264, 2264, 2265, 2266, 2267, 2268, 2268, 2269, 2270, 2271, 2272, 2272, 2273, 2274, 2275, 2276, 2276, 2277, 2278, 2279, 2279, 2280, 2281, 2282, 2282, 2283, 2284, 2285, 2286, 2286, 2287, 2288, 2289, 2289, 2290, 2291, 2292, 2292, 2293, 2294, 2295, 2295, 2296, 2297, 2297, 2298, 2299, 2300, 2300, 2301, 2302, 2303, 2303, 2304, }; // ============================================== // 【ISP LV 计算】曝光最小 1/512 秒 // 输入 : X 曝光=1/X 秒 (X >= 512) // 输出 : LV_Q8 // ============================================== uint16_t calc_lv_final(uint16_t X, uint16_t A_Q8, uint16_t D_Q8, uint16_t I_Q8) { int32_t lv_result; uint16_t logX, logA, logD, logI; // ================= 关键修正:曝光 X 最小 = 512 ================= if (X < MIN_X) X = MIN_X; // 强制最小 1/512s if (X > MAX_INPUT) X = MAX_INPUT; // 增益边界不变 if (A_Q8 > MAX_GAIN) A_Q8 = MAX_GAIN; if (D_Q8 > MAX_GAIN) D_Q8 = MAX_GAIN; if (I_Q8 > MAX_GAIN) I_Q8 = MAX_GAIN; // 查表 logX = log2_q8_lut[X]; if (A_Q8 <= MAX_INPUT) logA = log2_q8_lut[A_Q8]; else logA = log2_x256_fast(A_Q8); if (D_Q8 <= MAX_INPUT) logD = log2_q8_lut[D_Q8]; else logD = log2_x256_fast(D_Q8); if (D_Q8 <= MAX_INPUT) logI = log2_q8_lut[I_Q8]; else logI = log2_x256_fast(I_Q8); // 公式不变 lv_result = (int32_t)logX - logA - logD - logI + LV_OFFSET; // 钳位 if (lv_result < 256) lv_result = 256; if (lv_result > 512 * Q8) lv_result = (512 * Q8); return (uint16_t)lv_result; }

实际结果对比,以下为误差较大的数据对比。估算值和excel计算值最大相差12,精度提高不少。

3.3 迭代版本3

既然使用三次多项式拟合定点能提高计算精度,那么对于512以下的log2的Q8值计算是否也可以使用三次多项式拟合呢?我们验证如下代码,也可以达到不错的精度效果。

具体实现实例代码为:

// 使用三阶多项式拟合log2函数 no lut // ==================== 固定配置 ==================== #define Q8 256 // Q8 定点格式 #define LV_OFFSET (32 * Q8) // 固定偏移 +32 #define MAX_INPUT 512 // X/A/D/I 最大值 #define MIN_X 4 // 曝光 X #define MAX_GAIN (128*Q8) uint16_t log2_x256_fast(uint16_t x) { // 处理 f=2.0 越界问题 if (x == 32768) { return 3840; } uint8_t k; //if (x >= 32768) k = 15; if (x >= 16384) k = 14; else if (x >= 8192) k = 13; else if (x >= 4096) k = 12; else if (x >= 2048) k = 11; else if (x >= 1024) k = 10; else if (x >= 512) k = 9; else if (x >= 256) k = 8; else if (x >= 128) k = 7; else if (x >= 64) k = 6; else if (x >= 32) k = 5; else if (x >= 16) k = 4; else if (x >= 8) k = 3; else if (x >= 4) k = 2; else if (x >= 2) k = 1; else k = 0; // 归一化公式:f_q8 = x * 256 / 2^k // 全范围 1~32768 都正确,永不出现负数移位 // ========================== uint32_t f_q8 = ((uint32_t)x << 8) >> k; // 归一化到 [256, 512] Q8 //uint16_t f_q8 = (k == 15) ? 512 : (x >> (k - 8)); int32_t d = f_q8 - 256; int32_t d2 = (int16_t)(((int32_t)d * d) >> 8); int32_t d3 = (d2*d) >> 8; // 三阶多项式高精度近似 int32_t logf_q8 = ((int32_t)d * 369 >> 8) - ((int32_t)d2 * 185 >> 8) + (d3 * 85 >> 8); // 最终 Q8 结果 return (int32_t)((k << 8) + logf_q8); } // ============================================== // 【ISP LV 计算】曝光最小 1/512 秒 // 输入 : X 曝光=1/X 秒 (X >= 512) // 输出 : LV_Q8 // ============================================== uint16_t calc_lv_final(uint16_t X, uint16_t A_Q8, uint16_t D_Q8, uint16_t I_Q8) { int32_t lv_result; uint16_t logX, logA, logD, logI; // ================= 关键修正:曝光 X 最小 = 512 ================= if (X < MIN_X) X = MIN_X; // 强制最小 1/512s if (X > MAX_INPUT) X = MAX_INPUT; // 增益边界不变 if (A_Q8 > MAX_GAIN) A_Q8 = MAX_GAIN; if (D_Q8 > MAX_GAIN) D_Q8 = MAX_GAIN; if (I_Q8 > MAX_GAIN) I_Q8 = MAX_GAIN; // 查表 logX = log2_x256_fast(X); logA = log2_x256_fast(A_Q8); logD = log2_x256_fast(D_Q8); logI = log2_x256_fast(I_Q8); // 公式不变 lv_result = (int32_t)logX - logA - logD - logI + LV_OFFSET; // 钳位 if (lv_result < 256) lv_result = 256; if (lv_result > 512 * Q8) lv_result = (512 * Q8); return (uint16_t)lv_result; }

实际结果对比,以下为误差较大的数据对比。估算值和excel计算值最大相差12。和方法2基本一致。但是统一了计算方式,省去了查找表

四、数据线性插值

类似如下截图中相应权重的设置后,我们即可在驱动块内部,非常方便的根据LV的计算结果以及LV节点线性插值得到不同LV下的权重值。

http://www.jsqmd.com/news/657420/

相关文章:

  • 终极清净体验:3步告别Windows音量弹窗干扰的完整指南
  • CodeCombat:如何通过游戏化编程学习让300万学生爱上代码?
  • 别再死记硬背了!用Python实战拆解金融风控五大核心指标(WOE/IV/KS/LIFT/PSI)
  • 别等Q4复盘!2026奇点大会紧急发布的AI测试生成合规清单(含GDPR/信创双认证模板)
  • 别再只盯着5G了!从铱星到星链,聊聊卫星通信那些‘接地气’的关键技术与实际应用
  • 从‘它怎么又挂了?’到‘服务稳如狗’:我是如何用Docker给老旧.NET应用续命的
  • 从零到一:增量式PI控制器的FPGA硬件架构与实现
  • **发散创新:基于RBAC模型的权限管理系统在Python中的高效实现**在现代软件系统中,权限管理是保障数
  • 在线考试系统国产化适配|信创考试系统全栈落地与实战方案(管鲍 V8.0 国产化版)
  • 阿里“快乐生蚝”炸场!一句话让AI给你造个世界
  • Sunshine游戏串流终极指南:5分钟搭建跨设备游戏共享平台
  • 别再乱按按钮了!手把手教你用AT指令搞定两个HC-05蓝牙模块的配对(附串口助手调试技巧)
  • 游戏开发实战:用分离轴定理(SAT)搞定Unity 2D碰撞检测(附C#代码)
  • 《灵能纪元》——从量子纠缠到星际文明:解码未来2000年的人类进化图谱
  • HideVolumeOSD:3个场景告诉你,为什么你需要隐藏Windows音量弹窗
  • PLC西门子杯比赛:三部十层电梯博图v15.1程序设计与WinCC界面展示
  • 为什么你的Windows和Office激活总是失败?5分钟掌握终极解决方案
  • 告别复制粘贴!用Power Query三分钟搞定月度报表合并(附常见错误排查)
  • 告别土味海报!这 5 个素材网站,新手也能一键出高级感
  • 终极指南:5分钟快速上手Android日志阅读神器MatLog
  • 如何永久保存微信聊天记录?留痕项目完整指南
  • log2对数二阶多项式近似计算
  • Unity开发避坑指南:手把手教你排查和解决NullReferenceException空引用异常(附2022最新引擎Bug说明)
  • 终极macOS系统监控指南:3款开源工具全面掌控你的Mac性能
  • 颠覆性工业物联网统一访问平台:Apache PLC4X如何重塑工业设备互联范式
  • Skill才是真正的生产力:普通人AI进阶的3个思维框架
  • 中国科研船深海测试电缆切割设备,或加剧海底电缆安全担忧
  • 淘宝展示广告点击率预估:从数据清洗到协同过滤的实战解析
  • 从架构到实战:深入解析DSP的SCI通信机制
  • 保姆级教程:用dumpsys cpuinfo命令给手机应用做‘体检‘(附常见指标解读)