嵌入式软件开发常见问题
略
程人之美
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
擦除flash需要注意什么
另外,在擦除时需要注意避免将其他地址的有效内容误擦了。同上例子,如果要写地址0~10KB的内容,但是第11KB有其它有效数据,那么在写之前擦除了3页,则会把原不需要擦除的内容一并擦掉了。flash在擦除时是按照sector或者page擦除的,因此需要注意需要擦除的页数。例如,页大小为4KB,如果需要写的大小为10KB,那么需要连续擦除3页,才能保证10KB写成功。因此,在做flash上的地址分配时,需要考虑到页的大小,做好。原创 2023-09-19 00:38:05 · 784 阅读 · 0 评论 -
为什么写flash之前需要先擦除
flash是一种掉电不丢失的存储介质,由于它的硬件特性(晶体管)只能从1写为0,所以在写之前,需要将当前页擦除,全部写为1,然后再写入。如果不擦除,直接写入是会失败的。原创 2023-09-19 00:13:17 · 1703 阅读 · 0 评论 -
为什么不能在周期执行的中断内清狗
然而一般当程序跑飞时,PC指针处于异常状态,但是MCU的中断向量表是好的,中断执行机制是正常的。因此,如果在中断函数中有清狗操作,那么当程序异常时,如果中断函数响应了,那么可能无法按照预期执行狗复位,程序也无法恢复正常了。但是需要注意,我们这里说的中断一定要是周期执行的,并且执行的周期要小于狗复位的时间,例如定时器中断或者外部周期触发的管脚中断,这种中断函数中一定不能有清狗操作。为了程序的健壮性和鲁棒性,无论中断是否为周期执行或者执行周期为多少,我们都建议不要在中断中执行清狗操作。原创 2023-09-16 00:33:56 · 329 阅读 · 0 评论 -
为什么建议将常量用const关键字来修饰
如果我们将其定义在函数中,或者直接定义在全局变量中,没有用const关键字修饰,那么这些变量会被编译器分配在上面讲到的RAM区,因此会占用sram资源。当然这个做法也不是没有缺点,因为对于MCU来说,访问sram的效率会高于内部flash,如果不是追求极致的运行速度,那么建议用const修饰,否则不建议;一般来说我们的程序是放在内部flash中运行,在MCU中,内部flash资源远大于sram资源,因此这是一种牺牲内部flash来换取sram资源的办法。嵌入式软件中,内存资源是非常宝贵的,即sram资源。原创 2023-09-15 01:06:02 · 607 阅读 · 0 评论 -
为什么浮点数不能和0直接比较
诸如此类,都是不可取的,这里就和浮点数在计算机内存中的表示方法有关系了,比如浮点数1.0f在内存中可能为0.99999xxx,并不是一个精确的1.0f,并且浮点数0.0f在也有可能为0.00000xxx,具体值是多少,可以在IAR中查看。因此直接做比较,可能会造成误判。原创 2023-09-15 00:31:45 · 676 阅读 · 0 评论
分享