[开发生态]

硬件除法器使用演示

[复制链接]
204|10
手机看帖
扫描二维码
随时随地手机跟帖
xixi2017|  楼主 | 2023-3-29 17:15 | 显示全部楼层 |阅读模式
#include "SWM341.h"

void SerialInit(void);

int main(void)
{
        uint32_t uquo, urem;
        int32_t  squo, srem;
       
        SystemInit();
       
        SerialInit();
          
        DIV_Init(DIV);
       
        DIV_UDiv(15, 6);
        while(DIV_Div_IsBusy());
        DIV_UDiv_Result(&uquo, &urem);
        printf("15/6 QUO=%d, REM=%d\r\n", uquo, urem);
       
        DIV_SDiv(-15, 6);
        while(DIV_Div_IsBusy());
        DIV_SDiv_Result(&squo, &srem);
        printf("-15/6 QUO=%d, REM=%d\r\n", squo, srem);
       
        DIV_Root(2, 1);
        while(DIV_Root_IsBusy());
        printf("sqrt(2) = %f\r\n", DIV_Root_Result()/65536.0);
          
        while(1==1)
        {
        }
}


void SerialInit(void)
{
        UART_InitStructure UART_initStruct;
       
        PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);        //GPIOM.0配置为UART0输入引脚
        PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);        //GPIOM.1配置为UART0输出引脚
       
        UART_initStruct.Baudrate = 57600;
        UART_initStruct.DataBits = UART_DATA_8BIT;
        UART_initStruct.Parity = UART_PARITY_NONE;
        UART_initStruct.StopBits = UART_STOP_1BIT;
        UART_initStruct.RXThreshold = 3;
        UART_initStruct.RXThresholdIEn = 0;
        UART_initStruct.TXThreshold = 3;
        UART_initStruct.TXThresholdIEn = 0;
        UART_initStruct.TimeoutTime = 10;
        UART_initStruct.TimeoutIEn = 0;
        UART_Init(UART0, &UART_initStruct);
        UART_Open(UART0);
}

/******************************************************************************************************************************************
* 函数名称: fputc()
* 功能说明: printf()使用此函数完成实际的串口打印动作
* 输    入: int ch                要打印的字符
*                        FILE *f                文件句柄
* 输    出: 无
* 注意事项: 无
******************************************************************************************************************************************/
int fputc(int ch, FILE *f)
{
        UART_WriteByte(UART0, ch);
       
        while(UART_IsTXBusy(UART0));
       
        return ch;
}


使用特权

评论回复

相关帖子

xixi2017|  楼主 | 2023-3-29 17:15 | 显示全部楼层
有了这个就可以加速运算了。

使用特权

评论回复
tpgf| | 2023-4-12 16:17 | 显示全部楼层
硬件除法器是用来增强除法的计算速度的,有硬件除法器的帮助,一次除法运算只需要一个指令周期就能得到计算结果

使用特权

评论回复
磨砂| | 2023-4-12 16:38 | 显示全部楼层
是所有型号的单片机上都有这个硬件除法器吗

使用特权

评论回复
晓伍| | 2023-4-12 16:56 | 显示全部楼层
磨砂 发表于 2023-4-12 16:38
是所有型号的单片机上都有这个硬件除法器吗

感觉不是所有的都会有  一种是比较高级的 一种是专用的芯片上会有

使用特权

评论回复
八层楼| | 2023-4-12 17:15 | 显示全部楼层
如何检测在运行中会占用多少内存呢

使用特权

评论回复
观海| | 2023-4-13 08:23 | 显示全部楼层
硬件除法器是从纯硬件来计算得到结果而不是占用内存吗

使用特权

评论回复
guanjiaer| | 2023-4-13 09:26 | 显示全部楼层
观海 发表于 2023-4-13 08:23
硬件除法器是从纯硬件来计算得到结果而不是占用内存吗

可以想象成内部有一个硬件模块,输入除数和被除数后,一个指令周期就能输出结果。否则就只能使用CPU进行各种寄存器的数据处理,时间上成倍增加。

使用特权

评论回复
weifeng90| | 2023-4-14 07:56 | 显示全部楼层
测试过能够提升多少时间没有

使用特权

评论回复
LOVEEVER| | 2023-4-14 14:48 | 显示全部楼层
是不是还有个硬件乘法器?

使用特权

评论回复
xiaoerge| | 2023-4-18 11:38 | 显示全部楼层
既然一个周期就完成了,为什么还要查状态呢?耽误时间不是

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

1700

帖子

1

粉丝