精华内容
下载资源
问答
  • Linux内核中64位除法函数do_div

    千次阅读 2020-03-30 16:15:43
    使用asm/div64.h中宏do_div #include <asm/div64.h> unsigned long long x,y,result; unsigned long mod; mod = do_div(x,y); result = x; 64 bit division 结果保存在x中;余数保存在返回结果中。 【问题...

    使用asm/div64.h中宏do_div

    #include <asm/div64.h>
    unsigned long long x,y,result;
    unsigned long mod;
    mod = do_div(x,y);
    result = x; 
    
    64 bit division 结果保存在x中;余数保存在返回结果中。
    

    【问题】

    编译Linux下面的代码,经常会遇到这种错误:

    undefined reference to `__udivdi3’

    【解决过程】

    之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:

    嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):

    (1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b

    (2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为do_div(n, base),注意,此处do_div得到的结果是余数,而真正的a/b的结果,是用a来保存的。

    do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在

    arch/arm/include\asm\div64.h

    其实现很复杂,感兴趣的自己去代码里看吧,这里不多说了。

    因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,

    而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:

    undefined reference to “__udivdi3”

    【解决方法】

    知道原因,就好办了。办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用 uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为 do_div(a,b)得到的是余数,囧。。。),即可,而具体写其他,就显得很麻烦。此处,我们可以借鉴Linux中\fs\yaffs2 \yaffs_fs.c中的宏:

    static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
    {
    uint64_t result = partition_size;
    do_div(result, block_size);
    return (uint32_t)result;
    }

    来自己也去封装一个支持64位数的除法的函数,不过,Linux内核就是好,早已经帮我们实现了对应的64位的unsingned和signed两个函数:

    static inline u64 div_u64(u64 dividend, u32 divisor);

    static inline s64 div_s64(s64 dividend, s32 divisor);
    我们可以直接拿过来用了,注意用此函数时,要包含对应头文件:

    #include <linux/math64.h>

    总结一下就是:

    1.先包含头文件:

    2.然后用(a,b)得到a/b的结果即可。

    【提示】

    如果需要在进行64位除数的时候,同时得到余数remainder,可以直接用

    static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);
    static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);

    【引用】

    64 bit division in linux

    If you’ve encountered an error message like this

    Unknown symbol __udivdi3Unknown symbol __umoddi3Unresolved symbol __udivdi3Unresolved symbol __umoddi3
    you most likely want to make a 64 bit division, which is not supported by default in linux kernel space.
    To solve this problem, you need to use the do_div macro available in asm/div64.h:

    #include <asm/div64.h>unsigned long long x, y, result;unsigned long mod;mod = do_div(x, y);result = x;
    If you want to calculate x / y with do_div(x, y), the result of the division is in x, the remainder is returned from the do_div function.
    Since do_div is just an asm (assembler) macro, it doesn’t break real time determinism, so it’s also suitable for use in RTAI classic, RTAI fusion and ADEOS/ADEOS-IPIPE applications.

    展开全文
  • do_div

    千次阅读 2013-09-06 17:40:51
    办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div...

    【问题】

    编译Linux下面的代码,经常会遇到这种错误:

    undefined reference to `__udivdi3'

    【解决过程】

    之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:

    嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):

    (1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b

    (2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为

    do_div(n, base),注意,此处do_div得到的结果是余数而真正的a/b的结果,是用a来保存的

    do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在

    arch/arm/include\asm\div64.h

    其实现很复杂,感兴趣的自己去代码里看吧,这里不多说了。

    因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,

    而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:

    undefined reference to "__udivdi3"

    【解决方法】

    知道原因,就好办了。办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div(a,b)得到的是余数,囧。。。),即可,而具体写其他,就显得很麻烦。此处,我们可以借鉴Linux中\fs\yaffs2\yaffs_fs.c中的宏:

    static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
    {
    uint64_t result = partition_size;
    do_div(result, block_size);
    return (uint32_t)result;
    }

    来自己也去封装一个支持64位数的除法的函数,不过,Linux内核就是好,早已经帮我们实现了对应的64位的unsingned和signed两个函数:

    static inline u64 div_u64(u64 dividend, u32 divisor);

    static inline s64 div_s64(s64 dividend, s32 divisor);
    我们可以直接拿过来用了,注意用此函数时,要包含对应头文件:

    #include <linux/math64.h>

    总结一下就是:

    1.先包含头文件:

    2.然后用(a,b)得到a/b的结果即可。

    【提示】

    如果需要在进行64位除数的时候,同时得到余数remainder,可以直接用

    static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);
    static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);

    【引用】

    1. - 64 bit division in linux

    If you've encountered an error message like this

    Unknown symbol __udivdi3Unknown symbol __umoddi3Unresolved symbol __udivdi3Unresolved symbol __umoddi3

    you most likely want to make a 64 bit division, which is not supported by default in linux kernel space.
    To solve this problem, you need to use the do_div macro available in asm/div64.h:

    #include <asm/div64.h>unsigned long long x, y, result;unsigned long mod;mod = do_div(x, y);result = x;

    If you want to calculate x / y with do_div(x, y), the result of the division is in x, the remainder is returned from the do_div function.
    Since do_div is just an asm (assembler) macro, it doesn't break real time determinism, so it's also suitable for use in RTAI classic, RTAI fusion and ADEOS/ADEOS-IPIPE applications.


    展开全文
  • 使用asm/div64.h中宏do_div#includeunsignedlonglongx,y,result;unsignedlongmod;mod=do_div(x,y);result=x;64bitdivision结果保存在x中;余数保存在返回结果中。问题】编译Linux下面的代码,经常会遇到这种错误:...

    使用asm/div64.h中宏do_div

    #include 

    unsigned long long x,y,result;

    unsigned long mod;

    mod = do_div(x,y);

    result = x;

    64 bit division 结果保存在x中;余数保存在返回结果中。

    问题】

    编译Linux下面的代码,经常会遇到这种错误:

    undefined reference to `__udivdi3'

    【解决过程】

    之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:

    嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):

    (1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b

    (2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为

    do_div(n, base),注意,此处do_div得到的结果是余数,而真正的a/b的结果,是用a来保存的。

    do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在

    arch/arm/include\asm\div64.h

    其实现很复杂,感兴趣的自己去代码里看吧,这里不多说了。

    因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,

    而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:

    undefined reference to "__udivdi3"

    【解决方法】

    知道原因,就好办了。办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div(a,b)得到的是余数,囧。。。),即可,而具体写其他,就显得很麻烦。此处,我们可以借鉴Linux中\fs\yaffs2\yaffs_fs.c中的宏:

    static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)

    {

    uint64_t result = partition_size;

    do_div(result, block_size);

    return (uint32_t)result;

    }

    来自己也去封装一个支持64位数的除法的函数,不过,Linux内核就是好,早已经帮我们实现了对应的64位的unsingned和signed两个函数:

    static inline u64 div_u64(u64 dividend, u32 divisor);

    static inline s64 div_s64(s64 dividend, s32 divisor);

    我们可以直接拿过来用了,注意用此函数时,要包含对应头文件:

    #include

    总结一下就是:

    1.先包含头文件:

    2.然后用(a,b)得到a/b的结果即可。

    【提示】

    如果需要在进行64位除数的时候,同时得到余数remainder,可以直接用

    static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);

    static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);

    【引用】

    1. - 64 bit division in linux

    If you've encountered an error message like this

    Unknown symbol __udivdi3Unknown symbol __umoddi3Unresolved symbol __udivdi3Unresolved symbol __umoddi3

    you most likely want to make a 64 bit division, which is not supported by default in linux kernel space.

    To solve this problem, you need to use the do_div macro available in asm/div64.h:

    #include unsigned long long x, y, result;unsigned long mod;mod = do_div(x, y);result = x;

    If you want to calculate x / y with do_div(x, y), the result of the division is in x, the remainder is returned from the do_div function.

    Since do_div is just an asm (assembler) macro, it doesn't break real time determinism, so it's also suitable for use in RTAI classic, RTAI fusion and ADEOS/ADEOS-IPIPE applications.

    展开全文
  • 办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div...

    本文来自:http://hi.baidu.com/serial_story/blog/item/8ff17654ecae9e58574e0018.html

    【问题】

    编译Linux下面的代码,经常会遇到这种错误:

    undefined reference to `__udivdi3'

    【解决过程】

    之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:

    嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):

    (1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b

    (2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为

    do_div(n, base),注意,此处do_div得到的结果是余数而真正的a/b的结果,是用a来保存的

    do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在

    arch/arm/include\asm\div64.h

    其实现很复杂,感兴趣的自己去代码里看吧,这里不多说了。

    因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,

    而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:

    undefined reference to "__udivdi3"

    【解决方法】

    知道原因,就好办了。办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div(a,b)得到的是余数,囧。。。),即可,而具体写其他,就显得很麻烦。此处,我们可以借鉴Linux中\fs\yaffs2\yaffs_fs.c中的宏:

    static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
    {
    uint64_t result = partition_size;
    do_div(result, block_size);
    return (uint32_t)result;
    }

    来自己也去封装一个支持64位数的除法的函数,不过,Linux内核就是好,早已经帮我们实现了对应的64位的unsingned和signed两个函数:

    static inline u64 div_u64(u64 dividend, u32 divisor);

    static inline s64 div_s64(s64 dividend, s32 divisor);
    我们可以直接拿过来用了,注意用此函数时,要包含对应头文件:

    #include <linux/math64.h>

    总结一下就是:

    1.先包含头文件:

    2.然后用(a,b)得到a/b的结果即可。

    【提示】

    如果需要在进行64位除数的时候,同时得到余数remainder,可以直接用

    static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);
    static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);

    【引用】

    1. - 64 bit division in linux

    If you've encountered an error message like this

    Unknown symbol __udivdi3Unknown symbol __umoddi3Unresolved symbol __udivdi3Unresolved symbol __umoddi3

    you most likely want to make a 64 bit division, which is not supported by default in linux kernel space.
    To solve this problem, you need to use the do_div macro available in asm/div64.h:

    #include <asm/div64.h>unsigned long long x, y, result;unsigned long mod;mod = do_div(x, y);result = x;

    If you want to calculate x / y with do_div(x, y), the result of the division is in x, the remainder is returned from the do_div function.
    Since do_div is just an asm (assembler) macro, it doesn't break real time determinism, so it's also suitable for use in RTAI classic, RTAI fusion and ADEOS/ADEOS-IPIPE applications.


    展开全文
  • 办法就是,去你代码里面找到对应的用到除法的地方,即类似于a/b的地方,其中被除数a为64位,Linux中一般用用uint64_t,将a/b用do_div(a,b)得到的a去代替(注意,不是直接用do_div()得到真正a除b后的结果,因为do_div...
  • Linux内核中64位除法函数do_di

    千次阅读 2013-10-18 11:25:08
    使用asm/div64.h中宏do_div   #include  unsigned long long x,y,result; unsigned long mod; mod = do_div(x,y); result = x;     64 bit division 结果保存...
  • <div class="post-text" itemprop="text"> <p>I am trying to add Shareaholic recommendetions plugin in my template. <p>The results is always blank div...who can help me? <pre><code><div id=...
  • 在此之前,先清洗标准输出的缓存,调用atexit注册的函数等, 在c语言的main函数中调用return就等价于调用exit。 _Exit是c语言的库函数,自c99后加入,等价于_exit,即可以认为它直接调用_Exit。 基本来说,_...
  • css div边框倾斜I found a recent discussion on Reddit’s r/webdev interesting: how might one make a container appear to have a slanted bottom border, as shown above? The top-voted answer, while clever,...
  • <div class="post-text" itemprop="text"> <p>I want to count total number of div within a specific div. How can I do this? For Example: <pre><code><div class="items"> <div class="single_...
  • 我正在尝试将div添加到id...将html添加到div而不替换当前的内容守则:(有趣的部分是在底部)function do_show() {$("#webcamContainer").fadeIn('');}webcam.set_hook('onComplete', 'my_completion_handler');funct...
  • 我正在尝试使用id upload_results将dhtml添加到div中.这应该可以在不替换div中的当前内容的情况下工作.守则:(有趣的部分在底部)function do_show() {$("#webcamContainer").fadeIn('');}webcam.set_hook( '...
  • 最近正在开发OA系统,涉及到了页面打印的相关操作。在实际的开发过程中,浏览器本身自带的...本文使用的例子是3个4X3表格,分别写在,1号:内,2号:由载入页面内,3号:由iframe引入页面内,如图: 方法一:将table放
  • div简介

    千次阅读 2020-08-17 09:44:39
    There are several HTML elements that I have not introduced to this point because without CSS they have little point, ... These elements include span and div. 到目前为止,我还没有介绍几个HTML元素,因...
  • 使用CSS在一个div上覆盖另一个div

    千次阅读 2020-07-08 10:59:14
    Introduction: 介绍: Divs, a very common and highly familiar word in the web development ... No website or web page can go to be functional without the use of at least one div. It is a basic skill t...
  • Div Popup Example

    千次阅读 2013-12-16 14:10:50
    <div id="div_popup_background" runat="server" enableviewstate="True" style="position: absolute; left: 0; top: 0; z-index: 10; width: 100%; height: 150%; background-color: grey;
  • <div><p>Do you have security problems using abi_json_to_bin in your code?</p><p>该提问来源于开源项目:eosnewyork/eospy</p></div>
  • <p>I'd like to use PHP DOM Document to remove <code>div</code> tags which do not contain any attributes. However, I'd like to be able to keep all inner HTML contents.</p> <p><strong>Example:</strong>...
  • DIV拖拽

    千次阅读 2013-05-31 19:40:05
    var mouse = wc.reMouse(), obj = wc.obj, temp = wc.temp, div = o.div, position = wc.rePosition(div); obj.row = o; obj.on.b = "me"; obj.left = mouse.x - position.x; obj.top = mouse.y - position.y;...
  • } 加载 ${contextPath}/notepad/toCreate.do 页面到id为test的div中,加载完成之后,create页面中的js不会执行 这种方式没办法实现,换个思路: 代码如下:<div id=”test”> <iframe name=”testLoad” style=”...
  • PHP回声内容到div

    2016-07-09 11:44:29
    <p>Is there a way to do this <strong>without</strong> sending data with ajax from get_preset function call into jquery, then use jquery to put this into preset_preview div? <p>Can php somehow do it ...
  • <div class="post-text" itemprop="text"> <p>I have a div in which I have used <code>submit button</code> as follow : <pre><code><div id="collapse2" class="panel-collapse collapse"> <div ...
  • div 蒙层

    千次阅读 2010-11-19 11:55:00
    今日做了一个简单的DIV蒙层的demo   具体如下:    1、js代码   function createIframe(){  //mask遮罩层  var newMask=document.createElement("div");  newMask.id="mDiv";  newMask.style....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 223,575
精华内容 89,430
关键字:

do_div怎么用