[开发生态] 硬件除法器使用演示

[复制链接]
 楼主| xixi2017 发表于 2023-3-29 17:15 | 显示全部楼层 |阅读模式
  1. #include "SWM341.h"

  2. void SerialInit(void);

  3. int main(void)
  4. {
  5.         uint32_t uquo, urem;
  6.         int32_t  squo, srem;
  7.        
  8.         SystemInit();
  9.        
  10.         SerialInit();
  11.           
  12.         DIV_Init(DIV);
  13.        
  14.         DIV_UDiv(15, 6);
  15.         while(DIV_Div_IsBusy());
  16.         DIV_UDiv_Result(&uquo, &urem);
  17.         printf("15/6 QUO=%d, REM=%d\r\n", uquo, urem);
  18.        
  19.         DIV_SDiv(-15, 6);
  20.         while(DIV_Div_IsBusy());
  21.         DIV_SDiv_Result(&squo, &srem);
  22.         printf("-15/6 QUO=%d, REM=%d\r\n", squo, srem);
  23.        
  24.         DIV_Root(2, 1);
  25.         while(DIV_Root_IsBusy());
  26.         printf("sqrt(2) = %f\r\n", DIV_Root_Result()/65536.0);
  27.           
  28.         while(1==1)
  29.         {
  30.         }
  31. }


  32. void SerialInit(void)
  33. {
  34.         UART_InitStructure UART_initStruct;
  35.        
  36.         PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);        //GPIOM.0配置为UART0输入引脚
  37.         PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);        //GPIOM.1配置为UART0输出引脚
  38.        
  39.         UART_initStruct.Baudrate = 57600;
  40.         UART_initStruct.DataBits = UART_DATA_8BIT;
  41.         UART_initStruct.Parity = UART_PARITY_NONE;
  42.         UART_initStruct.StopBits = UART_STOP_1BIT;
  43.         UART_initStruct.RXThreshold = 3;
  44.         UART_initStruct.RXThresholdIEn = 0;
  45.         UART_initStruct.TXThreshold = 3;
  46.         UART_initStruct.TXThresholdIEn = 0;
  47.         UART_initStruct.TimeoutTime = 10;
  48.         UART_initStruct.TimeoutIEn = 0;
  49.         UART_Init(UART0, &UART_initStruct);
  50.         UART_Open(UART0);
  51. }

  52. /******************************************************************************************************************************************
  53. * 函数名称: fputc()
  54. * 功能说明: printf()使用此函数完成实际的串口打印动作
  55. * 输    入: int ch                要打印的字符
  56. *                        FILE *f                文件句柄
  57. * 输    出: 无
  58. * 注意事项: 无
  59. ******************************************************************************************************************************************/
  60. int fputc(int ch, FILE *f)
  61. {
  62.         UART_WriteByte(UART0, ch);
  63.        
  64.         while(UART_IsTXBusy(UART0));
  65.        
  66.         return ch;
  67. }
复制代码


 楼主| 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 | 显示全部楼层
既然一个周期就完成了,为什么还要查状态呢?耽误时间不是
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

2032

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部