- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的团队正在尝试控制德州仪器 OMAP l138 的频率。默认频率为 300 MHz,我们希望以“完整”的形式将其设置为 372 MHz:我们不仅希望将默认值更改为所需的值(或至少在启动时配置它),而且能够在运行时更改值。
在网络上搜索如何执行此操作时,我们找到了一篇文章,其中介绍了执行此操作的一种方法是通过“echo”命令:
echo 372000 /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
我们用这个命令做了一些测试,它运行良好,但有一个问题:有时第一次调用这个 echo 命令会导致错误消息“在内核中被零除”:
在我的个人测试中,这个错误总是出现在第一次调用 echo 命令时。所有后来的调用都没有错误。然后,如果我重置我的处理器并再次调用该命令,则会出现同样的问题:第一次调用导致此错误,之后的调用没有问题。
所以我的问题是:是什么导致了这个问题?我该如何解决呢? (显然答案“总是输入两次”不算数!)
(请随意提及实时控制 OMAP l138 频率的其他方法!)
最佳答案
在我看来,您在 davinci_spi_cpufreq_transition() 函数中被零除。在此函数的某处(或在 davinci_spi_cpufreq_transition 中调用的某些函数中)有一个错误的除法运算,它试图除以某个变量(在您的情况下)的值为 0。这是显然应该在代码中正确处理的错误情况,但实际上并非如此。
很难说到底是哪段代码导致了这个,因为我不知道你使用的是哪个内核。如果您可以提供指向您的内核存储库的链接,那将会容易得多。虽然我在上游内核中找不到davinci_spi_cpufreq_transition,但我找到了here .
davinci_spi_cpufreq_transition() 函数似乎在 drivers/spi/davinci_spi.c 中.它调用davinci_spi_calc_clk_div() function .那里有2个部门。首先是:
prescale = ((clk_rate / hz) - 1);
第二个是:
if (hz < (clk_rate / (prescale + 1)))
其中一个可能导致“被零除”错误。我建议您通过以下方式修改 davinci_spi_calc_clk_div() 函数来追踪是哪个(只需添加标记为“+”的行):
static void davinci_spi_calc_clk_div(struct davinci_spi *davinci_spi)
{
struct davinci_spi_platform_data *pdata;
unsigned long clk_rate;
u32 hz, cs_num, prescale;
pdata = davinci_spi->pdata;
cs_num = davinci_spi->cs_num;
hz = davinci_spi->speed;
clk_rate = clk_get_rate(davinci_spi->clk);
+ printk(KERN_ERR "### hz = %u\n", hz);
prescale = ((clk_rate / hz) - 1);
if (prescale > 0xff)
prescale = 0xff;
+ printk("### prescale + 1 = %u\n", prescale + 1UL);
if (hz < (clk_rate / (prescale + 1)))
prescale++;
if (prescale < 2) {
pr_info("davinci SPI controller min. prescale value is 2\n");
prescale = 2;
}
clear_fmt_bits(davinci_spi->base, 0x0000ff00, cs_num);
set_fmt_bits(davinci_spi->base, prescale << 8, cs_num);
}
我的猜测——它是“hz”变量,在您的情况下为 0。如果是这样,您可能还想将下一个调试行添加到 davinci_spi_setup_transfer() 函数:
if (!hz)
hz = spi->max_speed_hz;
+ printk(KERN_ERR "### setup_transfer: setting speed to %u\n", hz);
davinci_spi->speed = hz;
davinci_spi->cs_num = spi->chip_select;
完成所有这些修改后,重新构建内核,您可能会明白为什么会出现“除以零”错误。只需在内核引导日志中查找以“###”开头的行。如果您不知道下一步该做什么——附上这些调试行,我会尽力帮助您。
关于linux - 控制TI OMAP l138频率导致 "Division by zero in kernel",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783606/
考虑以下 Python 2 代码 from timeit import default_timer def floor(): for _ in xrange(10**7): 1
每当我运行此代码时,我都会在下面提到的行中得到零除错误。同样,当列表不是用户输入时,也不会发生该错误。错误如何出现,我该如何解决? n=int(input("Dimension of the coef
Find a regular expression which represents strings made of {a, b}, where number of a's is divisible
我有一些测试套件中的MXL文件,其中第一个度量表示除法为8(即每四分音符8个单位)。 措施4是3/4的时间,其余时间如下: 24 1 我希望在这里看到。由于24除以8等于
我需要在不使用 %、/ 或 * 的情况下判断一个数字是否能被 3 整除。给出的提示是使用atoi()函数。知道该怎么做吗? 最佳答案 当应用“将所有数字相加,看看是否能除以 3”时,当前答案都集中在十
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
我正在尝试将十进制数转换为十六进制,内置的十六进制函数限制为 8 个字符,因此我不得不编写自己的函数,但是 VBScript 似乎将数字四舍五入到小数点后两位。 例如。 106681252129194
也许这是在这里问的错误问题,但我很好奇。我知道许多语言在被要求除以 0 时只会爆炸并失败,但是是否有任何编程语言可以智能地处理这个不可能的总和 - 如果是这样,它们会做什么?他们是继续处理,将 350
机器以一元形式取2个自然数(a, b)作为输入,输出整数商和整数除法的余数a/b。 磁带上的初始和最终状态是什么?功能图会是什么样子? 提前致谢。 最佳答案 此处使用的设计如下: 从表示 a 的磁带部
我想检查一个浮点值是否“接近”32 的倍数。例如64.1“几乎”可以被 32 整除,63.9 也是如此。 现在我正在这样做: #define NEARLY_DIVISIBLE 0.1f float o
我正在尝试将间隔*[a,b]*除以保存在浮点变量数组中的*npt*点。 我需要 *a* 和 *b* 始终出现在最终数组中,并且 *npt* 可以根据我的需要进行变化。 我尝试过: delta = (b
这个问题在这里已经有了答案: My computer thinks that signed int is smaller then -1? [duplicate] (3 个答案) sizeof()
在 C 中,如果我想将 int 除以 2,x%2应该像 (x%10)% 2 一样快 因为一个好的编译器只会看最后一点。但是在具有无限精度算术的语言中呢? 特别是,在 Haskell 中会更快(或者它们
哪个版本更快?x * 0.5 or x / 2 前段时间我在大学里有一门叫做计算机系统的类(class)。从那时起,我记得可以使用相对“简单”的逻辑门来实现两个值的乘法,但除法不是“ native ”
我正在尝试为 bignum 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
由于许多 Project Euler 问题需要您多次进行可分性检查,因此我一直试图在 ZX81 中找出执行此任务的最快方法。基本的。 到目前为止,我已经比较过 (N/D)至 INT(N/D)检查,是否
运行代码后,我收到一个ZeroDivisionError!有人可以解释发生了什么吗?寻找bscore和gscore输入的平均值 bscore = 0 gscore = 0 bcount = 0 gco
我正在尝试用 Javascript 创建一个逻辑开关。目的是创建一个 Javascript 函数,该函数可用于触发按钮单击事件并打开或关闭特定的日历源。当您第一次单击按钮时,它应该加载日历提要,当第二
我正在尝试为bignums 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
我是一名优秀的程序员,十分优秀!