一沙一世

  • 2023-09-22
  • 回复了主题帖: 大家帮忙看看,为什么一条语句会导致 单片机复位

    yubinwu 发表于 2023-9-22 11:19 什么MCU啊,这样的访问(访问32位数据时地址末尾2位必须是0,不然)会出现内核bug 不过程序应该也有问题 ...
    感谢。是  华大HC32L136K8TA  contex m0 的内核

  • 回复了主题帖: 大家帮忙看看,为什么一条语句会导致 单片机复位

    maychang 发表于 2023-9-22 09:39 【为什么一条语句会导致单片机复位】 猜测是数组越界。
    谢谢。但是没有越界呀,接收的数据有28个呢.   有同事建议改成以下形式,测试可以了         sj1[0] = rx_buffer[10];            sj1[1] = rx_buffer[11];            sj1[2] = rx_buffer[12];            sj1[3] = rx_buffer[13];            lsaddr = (uint32_t *)&sj1[0];            lslong = *lsaddr;             // lsaddr = (uint32_t *)&rx_buffer[10];                 sbsj.dishu = lslong;   真怪,难道跟字节对齐有关系?

  • 回复了主题帖: 大家帮忙看看,为什么一条语句会导致 单片机复位

    wangerxian 发表于 2023-9-22 10:08 你这么写试试看。 int32_t a = 0; a = *lsaddr; sbsj.dishu = a; 如果还会死,可以单独注释 ...
    谢谢。 有同事建议改成以下形式,测试可以了         sj1[0] = rx_buffer[10];            sj1[1] = rx_buffer[11];            sj1[2] = rx_buffer[12];            sj1[3] = rx_buffer[13];            lsaddr = (uint32_t *)&sj1[0];            lslong = *lsaddr;             // lsaddr = (uint32_t *)&rx_buffer[10];                 sbsj.dishu = lslong;   真怪,难道跟字节对齐有关系?

  • 回复了主题帖: 大家帮忙看看,为什么一条语句会导致 单片机复位

    wangerxian 发表于 2023-9-22 09:08 rx_buffer这个数组定义的多大?
    数组很大,有50个字节

  • 发表了主题帖: 大家帮忙看看,为什么一条语句会导致 单片机复位

    1、meter.h typedef struct {       int32_t     sysl;     uint32_t    dbbh;     uint32_t    zgsl;     uint32_t    zysl;     uint16_t    danwei;     uint16_t    gscs;     uint16_t    yhao;     uint16_t    maxdl;     uint16_t    baojing;     uint8_t     zzzt;     uint8_t     mphl;     uint8_t     mphh;       uint8_t     numb_hu;  ///     uint8_t     loudao;       int32_t     maxdl2;   //      int32_t     baojing2; //         uint32_t    dishu;    // } METER_VALUEs; extern METER_VALUEs sbsj;     //////水表存储数据   2、metet.c文件中 METER_VALUEs  sbsj;     3、tx.c文件中   uint32_t *lsaddr ;   lsaddr = (uint32_t *)&rx_buffer[10];  //  rx_buffer[]  为串口接收到数据的存放区 sbsj.dishu = *lsaddr;      //  有这么语句就会导致单片机复位,注释掉,就不会复位 ,请大家帮忙分析一下原因 if (sbsj.dishu> 990000)  sbsj.dishu=0;            

  • 2023-09-08
  • 回复了主题帖: 请大家帮忙分析一下一段代码的 思路,谢谢大家。

    wang12011201 发表于 2023-9-7 20:03 这个应该很简单啊,学C的很容易搞定的,循环或移位搞定
    谢谢。我看人家代码中居然没有用到除法,感应很神奇。

  • 2023-09-07
  • 发表了主题帖: 请问 电表645规约中 保电是什么意思,合闸允许是通电吗,为什么加个允许,附图

    请问 电表645规约中 【保电】是什么意思,【合闸允许】是通电吗,即是给表下发通电指令吗,为什么加个允许,附图如下    

  • 2023-09-04
  • 发表了主题帖: 请问为什么4个引脚的光耦 波特率只能用在2400以下,有没有4个引脚的光耦 可到115200的

    请问为什么4个引脚的光耦 波特率只能用在2400以下,有没有4个引脚的光耦 可到115200的

  • 回复了主题帖: 求波特率能上2400的4引脚光耦,品牌和型号,谢谢大家。

    tagetage 发表于 2023-9-4 12:03 搜索高速光耦。看数据手册。
    那些通常都是6个腿。

  • 发表了主题帖: 求波特率能上2400的4引脚光耦,品牌和型号,谢谢大家。

    求波特率能上2400的4引脚光耦,品牌和型号,谢谢大家。

  • 发表了主题帖: 请问在PROTEL99中从PCB 文件 反查是由哪个SCH文件生成的 用哪个菜单命令来查,谢谢

    请问在PROTEL99中从PCB 文件 反查是由哪个SCH文件生成的 用哪个菜单命令来查,谢谢

  • 2023-09-03
  • 回复了主题帖: 请问电能表抄表645规约中 继电器通断指令的加密这一块如何处理

    damiaa 发表于 2023-9-2 21:34 这个协议里面又密码设置,更新和密码校验 有安全认证相关命令,具体可以看协议。
    谢谢。请问这个密码设置,如何起作用,是在每条指令里面都包含这个密码,还是用这个密码来对整个指令进行加密呢。

  • 2023-09-02
  • 发表了主题帖: 请问电能表抄表645规约中 继电器通断指令的加密这一块如何处理

    请问电能表抄表645规约中 继电器通断指令的加密这一块如何处理

  • 2023-09-01
  • 回复了主题帖: 请大家帮忙分析一下一段代码的 思路,谢谢大家。

    wangerxian 发表于 2023-9-1 10:35 看着有点凌乱,感觉实现你想的那样,不需要这么麻烦。
    人家的思路我搞不懂,这代码编译后的指令比用除法生成的指令那不知道缩减了多少倍!!! 请帮忙仔细研究一下,谢谢。

  • 回复了主题帖: 请大家帮忙分析一下一段代码的 思路,谢谢大家。

    ttxiaotaoge 发表于 2023-9-1 10:56 写的好乱,直接取每一位放到对应地址就行了啊
    人家的思路我搞不懂,这代码编译后的指令比用除法生成的指令那不知道缩减了多少倍!!! 请帮忙仔细研究一下,谢谢。

  • 回复了主题帖: 请大家帮忙分析一下一段代码的 思路,谢谢大家。

    damiaa 发表于 2023-9-1 10:30 unsigned char adjbcd(unsigned char gg) {     unsigned char nn=gg, mm=gg, mn;   &nb ...
    谢谢。我看着倒不是特别乱。就是人家的思路搞不懂,这代码编译后的指令比用除法生成的指令那不知道缩减了多少倍!!! 请帮忙仔细研究一下,谢谢。

  • 发表了主题帖: 请大家帮忙分析一下一段代码的 思路,谢谢大家。

    请大家帮忙分析一下,下面这段代码的思路,它实现的功能是   【将 long 型 变量 NUM 的数值 按压缩BCD码的 形式存入 数组  , 比如 NUM=1234567890 (注意 此处是10进制,不是 16进制的 0x1234567890) 存入数组 A[9] 后 A[0]=0X12 (注意是16进制的0X12 ,不是10进制的12 其余均是) A[1]=0X34 A[2]=0X56 A[3]=0X78 A[4]=0X90】   我看不明白以下代码是如何实现这一功能的,请大家帮忙 分析一下,谢谢大家。   unsigned char adjbcd(unsigned char gg) {     unsigned char nn=gg, mm=gg, mn;     mm=mm+0x3;     if((mm&0x08 )==0x08)  nn=mm;     mn=nn;     nn=nn+0x30;     if((nn&0x80)==0x80) mn=nn;     return mn; } //;/////////////////////////////////// void bcd(unsigned int tt) {     unsigned  int ss,   kl=tt;     _Bool  GGT;     q1=0x0 ;     q2=0x0;     q3=0x0;     ss=0 ;     GGT=1;     while(GGT)     {         q1=q1<<1;         if( (q2&0x80)==0x80) q1|=0x01;         q2=q2<<1;         if ((q3&0x80)==0x80) q2|=0x01;         q3=q3<<1;         if ((kl&0x8000)==0x8000) q3|=0x01;         kl=kl<<1;         ss++;         if(ss<16)         {             q3=adjbcd(q3);             q2=adjbcd(q2);             q1=adjbcd(q1);         }         else GGT=0;     } }

  • 回复了主题帖: 如何将一个将 long 型 变量 NUM 的数值 按压缩BCD码的 形式存入 数组

    dcexpert 发表于 2023-9-1 09:04 你都写出来了,还要转换什么
    没表述清楚,请编写一个函数,实现以上功能。谢谢。

  • 发表了主题帖: 如何将一个将 long 型 变量 NUM 的数值 按压缩BCD码的 形式存入 数组

    本帖最后由 一沙一世 于 2023-9-1 09:19 编辑 请编写一个函数,实现以下功能   将 long 型 变量 NUM 的数值 按压缩BCD码的 形式存入 数组  , 比如 NUM=1234567890 (注意 此处是10进制,不是 16进制的 0x1234567890) 存入数组 A[9] 后 A[0]=0X12 (注意是16进制的0X12 ,不是10进制的12 其余均是) A[1]=0X34 A[2]=0X56 A[3]=0X78 A[4]=0X90

  • 2023-08-31
  • 发表了主题帖: C语言中 如何低代码实现 LONG型变量 与数组之间的转换

    C语言中 如何低代码实现 LONG型变量 与数组之间的转换,具体要求如下   1 、 将 long 型 变量 NUM 的数值  按16进制 形式存入  数组的 函数 比如  NUM=0X123456789ABCDEF0  存入数组 A[9] 后  A[0]=0X12     A[1]=0X34      A[2]=0X56      A[3]=0X78    A[4]=0X9A      A[5]=0XBC      A[6]=0XDE      A[7]=0XF0         相反有没有函数能将 A[0]-A[7] 的内容 转到 long型变量  num中  2 、    将 long 型 变量 NUM 的数值  按压缩BCD码的 形式存入  数组的 函数 比如 NUM=1234567890  存入数组 A[9] 后  A[0]=12     A[1]=34      A[2]=56      A[3]=78    A[4]=90          相反有没有函数能将 A[0]-A[7] 的中的压缩BCD码的内容 转到 long型变量  num中    除法编译后生成的最终的代码大太,如何减小编译后生成的编代码的数量 ,请大家特别注意一下。谢谢大家。

最近访客

< 1/6 >

统计信息

已有60人来访过

  • 芯积分:1256
  • 好友:1
  • 主题:317
  • 回复:448
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言