wjroy11

    1. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-25
      wsmysyn 发表于 2019-1-25 11:25 for自己写的,纯C语言,对不对齐,没有关系,编译器去干这件事情,不对齐,拆分几次去读,对齐的话,一次 ...
      好深奥的样子,谢谢大神,我再消化消化,非常感谢!
    2. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-25
      wsmysyn 发表于 2019-1-25 10:52 关于问题2,大概有几个方向,可以尝试一下 1、最直接的是想办法查看一下fault相关的寄存器,这些寄存 ...
      感谢指点。昨天试过用一个for循环单字节赋值来代替memcpy拷贝数据,是没有问题的。所以应该还是库的memcpy函数要求字节对齐。
    3. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-25
      wsmysyn 发表于 2019-1-24 20:35 1、数组对齐如果没有明确告诉编译器对齐方式,应该是默认对齐,但是可能有其他原因导致,不能对齐。比如 ...
      感谢解答!! 问题2:编译可以通过,运行也正常,不进Hardfault。不明白这种情况为什么不报错了。
    4. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      wsmysyn 发表于 2019-1-24 09:51 他说的这个问题我之前遇到类似的。。 刚看的时候,感觉C语言的可能行不大,觉得应该是C++。下边他确实 ...
      感谢,基本定位问题是字节对齐的事情。还有几个疑问看能否帮忙解答下: 找到问题原因了,是字节对齐的问题。 工程里定义了两个比较大的数组,如下:__attribute__((aligned(4))) uint8_t MMU_US_Data_Memory[US_CAPACITY]; uint8_t MMU_SD_Data_Memory[UD_CAPACITY]; 对这两个数组的内容进行处理的时候用到了memcpy,调试发现经常在memcpy的地方进入Hardfault。调试看以上两个数组的首地址MMU_US_Data_Memory和MMU_SD_Data_Memory都不是4字节对齐的,所以讲两个数组定义改成: __attribute__((aligned(4)))  uint8_t US_Data_Memory[US_CAPACITY]; __attribute__((aligned(4)))  uint8_t SD_Data_Memory[UD_CAPACITY]; 在memcpy处打断点,两个数组的首地址4字节对齐了,继续运行,没出现Hardfault。 那么基本上就断定是字节对齐的问题导致的Hardfault。 有几个不明白的地方请教下: 1、为什么不加__attribute__((aligned(4))) ,申请的数组就不是字节对齐的呢?我申请数组大小是16K,跟我申请空间过大有关系吗? 2、数组字节对齐后,我试着做了这个测试:     memcpy(US_Data_Memory+1,arrytest,100);     也就是说在字节对齐的US_Data_Memory数组地址基础上加了偏移量1,那么数据拷入的地址肯定就不是字节对齐了,这个时候代码是不报错的,为什么呢? 3、在调试状态下,看Disassembly窗口的汇编代码,memcpy函数对应的是:__aeabi_memcpy(),在网上查了下,这个意思是不用字节对齐的拷贝函数,如果要4字节对齐,对应的函数是__aeabi_memcpy4(),可是在汇编窗口并没有看到这个函数。不太理解。 4、为什么交换两个文件之后,两个数组的首地址就会被4整除?编译文件顺序会影响数组地址申请吗? 以上三个问题,请大牛们帮忙解释下,谢谢。
    5. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      zhuzd 发表于 2019-1-23 17:13 多打几个断点,调试一下。看看程序运行到哪里出错的。找找问题。
      感谢,基本定位问题是字节对齐的事情。还有几个疑问看能否帮忙解答下: 找到问题原因了,是字节对齐的问题。 工程里定义了两个比较大的数组,如下:__attribute__((aligned(4))) uint8_t MMU_US_Data_Memory[US_CAPACITY]; uint8_t MMU_SD_Data_Memory[UD_CAPACITY]; 对这两个数组的内容进行处理的时候用到了memcpy,调试发现经常在memcpy的地方进入Hardfault。调试看以上两个数组的首地址MMU_US_Data_Memory和MMU_SD_Data_Memory都不是4字节对齐的,所以讲两个数组定义改成: __attribute__((aligned(4)))  uint8_t US_Data_Memory[US_CAPACITY]; __attribute__((aligned(4)))  uint8_t SD_Data_Memory[UD_CAPACITY]; 在memcpy处打断点,两个数组的首地址4字节对齐了,继续运行,没出现Hardfault。 那么基本上就断定是字节对齐的问题导致的Hardfault。 有几个不明白的地方请教下: 1、为什么不加__attribute__((aligned(4))) ,申请的数组就不是字节对齐的呢?我申请数组大小是16K,跟我申请空间过大有关系吗? 2、数组字节对齐后,我试着做了这个测试:     memcpy(US_Data_Memory+1,arrytest,100);     也就是说在字节对齐的US_Data_Memory数组地址基础上加了偏移量1,那么数据拷入的地址肯定就不是字节对齐了,这个时候代码是不报错的,为什么呢? 3、在调试状态下,看Disassembly窗口的汇编代码,memcpy函数对应的是:__aeabi_memcpy(),在网上查了下,这个意思是不用字节对齐的拷贝函数,如果要4字节对齐,对应的函数是__aeabi_memcpy4(),可是在汇编窗口并没有看到这个函数。不太理解。 以上三个问题,请大牛们帮忙解释下,谢谢。
    6. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      找到问题原因了,是字节对齐的问题。 工程里定义了两个比较大的数组,如下:__attribute__((aligned(4))) uint8_t MMU_US_Data_Memory[US_CAPACITY]; uint8_t MMU_SD_Data_Memory[UD_CAPACITY]; 对这两个数组的内容进行处理的时候用到了memcpy,调试发现经常在memcpy的地方进入Hardfault。调试看以上两个数组的首地址MMU_US_Data_Memory和MMU_SD_Data_Memory都不是4字节对齐的,所以讲两个数组定义改成: __attribute__((aligned(4)))  uint8_t US_Data_Memory[US_CAPACITY]; __attribute__((aligned(4)))  uint8_t SD_Data_Memory[UD_CAPACITY]; 在memcpy处打断点,两个数组的首地址4字节对齐了,继续运行,没出现Hardfault。 那么基本上就断定是字节对齐的问题导致的Hardfault。 有几个不明白的地方请教下: 1、为什么不加__attribute__((aligned(4))) ,申请的数组就不是字节对齐的呢?我申请数组大小是16K,跟我申请空间过大有关系吗? 2、数组字节对齐后,我试着做了这个测试:     memcpy(US_Data_Memory+1,arrytest,100);     也就是说在字节对齐的US_Data_Memory数组地址基础上加了偏移量1,那么数据拷入的地址肯定就不是字节对齐了,这个时候代码是不报错的,为什么呢? 3、在调试状态下,看Disassembly窗口的汇编代码,memcpy函数对应的是:__aeabi_memcpy(),在网上查了下,这个意思是不用字节对齐的拷贝函数,如果要4字节对齐,对应的函数是__aeabi_memcpy4(),可是在汇编窗口并没有看到这个函数。不太理解。 以上三个问题,请大牛们帮忙解释下,谢谢。
    7. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      shipeng 发表于 2019-1-24 09:45 有没有clean了后再编译试试
      这个试过,没有用。
    8. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      wsmysyn 发表于 2019-1-24 09:33 单纯说现象,不一定一下子就定位到,具体和工程,代码有关,, 提供不了,大家就只有一个思路了,你自己 ...
      嗯,非常感谢提供这么多的思路,我根据大家的意见再自己调试一下,:congratulate:
    9. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      tiankai001 发表于 2019-1-23 22:34 我觉得跟文件顺序无关,因为编译的时候编译器会自动把个个函数按照程序流程编译,最主要的原因可能是有个 ...
      工程用了很久也没发现有什么大的bug,所以感觉应该不会存在某个函数运行不到的情况
    10. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-24
      freebsder 发表于 2019-1-24 00:10 AB两个文件里面有什么全局的东西是一样的?是AB两个文件交换才出问题,还是任意两个文件交换都会出问题?
      只是AB两文件交换才有问题,其他文件没影响
    11. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-23
      另外一个论坛里找到一个类似的情况,跟我遇到的很像,不知道是不是同一个问题,我在研究一下。连接这个   http://bbs.21ic.com/icview-1197474-1-1.html
    12. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-23
      常见泽1 发表于 2019-1-23 17:25 就是把工程里的 C文件调了顺序?
      对,就是工程里两个文件调换一下顺序,编译也能通过,只是运行时,调换后的工程就Hardfault。我用的c++,调换的是两个cpp文件。
    13. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-23
      常见泽1 发表于 2019-1-23 17:16 具体例子拿出来看看呢
      工程太大了,也不适合发出来,所以只是描述一下问题表象,看大家有没有思路提供
    14. KEIL工程编译时的一个奇怪问题 31/6362 stm32/stm8 2019-01-23
      wenyangzeng 发表于 2019-1-23 17:13 顺序不一样时有时硬件未初始化就先进入某个中断当然死机了。
      我的理解顺序不一样,只是编译的时候顺序不同,但是最终链接的hex或者bin文件应该没差别才对。按您说的硬件未初始化这个说法不太合适,比如写代码时,谁也不会刻意把初始化的文件放在最上面吧。
    15. STM32的中断优先级分组设置 4/3602 stm32/stm8 2019-01-23
      huo_hu 发表于 2018-12-6 11:32 如果就几个中断之间没有关联当然就无所谓优先级了,早点晚点处理也都无所谓. 特殊的情况比如串口中断同时又 ...
      明白,感谢版主大大
    16. STM32的中断优先级分组设置 4/3602 stm32/stm8 2018-12-04
      本帖最后由 wjroy11 于 2018-12-4 11:03 编辑
      gs001588 发表于 2018-12-3 16:20 优先级可以不设置,那就是同级别优先,谁先来算谁的。
      谢谢,手册没有找到,网上查到了默认分组是4
    17. SPI读数异常 求指教 11/5347 stm32/stm8 2018-10-08
      huaiqiao 发表于 2018-9-26 18:11 “每次读传感器的寄存器要读两次才能读出来正确的值。”这个虽然楼主你找到问题所在了,但是你一定要注意有 ...
      嗯,多谢提醒。这个片子就是8bit的,就是不清楚为什么要搞这样一个机制,读一个寄存器的值,8bit,还非要读两次。
    18. SPI读数异常 求指教 11/5347 stm32/stm8 2018-09-26
      supermiao123 发表于 2018-9-25 17:55 最直观的方法就是示波器触发着看,软件单步调试,看问题在哪,根据调试结果来调整你的程序,不然你也不知道 ...
      嗯,有道理。我找到问题了,确实是这个传感器芯片比较特殊,spi读取的时候会先发送一个无效字节出来,接着才是有效数据。正在修改代码,感谢指导!
    19. SPI读数异常 求指教 11/5347 stm32/stm8 2018-09-25
      刘123 发表于 2018-9-25 16:15 你可以了解一下spi时序的问题,我感觉是你使用spi模式不对。
      开始我也怀疑是时序的问题。这个传感器可同时采集加速度和陀螺,用同一路spi不同片选去采集两种数据,采集陀螺就没事,采集加速度就不行,所以排除spi时序不对的问题,可能问题还是出在这个芯片的使用上,我再看看手册吧。感谢!
    20. SPI读数异常 求指教 11/5347 stm32/stm8 2018-09-25
      huo_hu 发表于 2018-9-25 15:00 没用过,帮你顶一下
      谢谢版主

最近访客

< 1/1 >

统计信息

已有14人来访过

  • 芯积分:--
  • 好友:1
  • 主题:9
  • 回复:35

留言

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


现在还没有留言