打印
[牛人杂谈]

Nuvoton单片机调试

[复制链接]
1136|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gejigeji521|  楼主 | 2016-7-31 22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、用keil debug调试Nano系列MCU时,偶尔进入HardFault_Handler中程序死掉了。
   原因:
   1)定义变量时的类型是char,外部文件调用时声明的是extern int,同一变量定义与外部声明不一致而导致错误。
   2)用DMA时,1byte传输,数据手册中要求地址要字对齐,由于是外设与内存之间使用dma,定义的数组在程序中换了定义的位置结果导致数据不正确,debug时还进入HardFault_Handler中,调整数组定义的地址就可以了。

摘抄总结:
        Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。常见的4种异常及产生异常的情况如下:
        Bus Fault:在fetch指令、数据读写、fetch中断向量或中断时存储恢复寄存器栈情况下,检测到内存访问错误则产生Bus Fault。
        Memory Management Fault:访问了内存管理单元(MPU)定义的不合法的内存区域,比如向只读区域写入数据。
       Usage Fault:检测到未定义指令或在存取内存时有未对齐。

沙发
gejigeji521|  楼主 | 2016-7-31 22:41 | 只看该作者
新唐的FLASH,LOADROM,APROM
一般单片机中只有2 3种数据,例如 FLASH(程序)、RAM/SRAM(数据)、EEPROM(数据),新唐的有好多个,刚开始接触还迷糊着!
   APROM:Application Program ROM 用于存储应用程序的FLASH
   Data Flash: Data Flash ROM 用于存储常量数据的FLASH(这个与EEPROM不一样,不可单个擦出哦)
   LDROM: ISP Loader ROM 用于存储BOOTLOADER 固件程序
   RAM:这个大家都知道了,是数据空间

其实M0也跟一般单片机一样、也是只有FLASH与RAM.新唐M0的单片机有两个FLASH,一个是LDROM,另一个就是APROM与Data Flash(别看有两个其实也只是一个,只是新唐的程序员将其分成了两个而以,其实他们都是一个娘生的,可以算是连体双胞胎)。

特别说明: LDROM与另一个ROM是相互独立的,由CONFIG中的CBS位选择启动。
RAM这个就是数据空间了,有用存放变量数据(这个就不讲了)。


那有些人会问 LDROM作用不是和APROM一样都是记录程序的,是不是可以将程序写在LDROM不用APROM?
回答是可以的,若你的程序小就可以这么做,其实不要LDROM也可以做ISP。那新唐为什么要特意做一个LDROM出来呢,我个人认为是:
1、这样BOOTLOADER程序与APPLICATION程序互不相关不会有影响,便于开发人员(若不独自开辟一个LDROM,你调试就必须擦出BOOTLOADER,等等).
2、程序可以加载BOOTLOADER,但以开机可以根本不运行且不会影响到应用程序。
3、更方便做BOOTLOADER程序,坛子里有将APROM做成U盘,直接将程序COPY到这个U盘里就可以升级

忘了一点了,那为什么没有EEPROM呢?
   在ARM CORTEX-M架构中没有EEPROM,若增加EEPROM需要额外的成本,EEPROM重要性不够(且可以将FLASH中的几页做为EEPROM来使用)。纵观大多CORTEX-M基本上都没有,我有必要性也不是很高!
   好像前段时间TI出了一个M4系列 带2K的EEPROM!有兴趣的朋友可以支申请个样片玩玩,我的想法是:若不是频繁操作,使用FLASH当EEPROM足以!

刚看ISP Application note看到的FLASH说明,以下为官方说明:
The internal flash memory can be divided into three regions, LDROM, APROM and data flash. The APROM usually saves the program code developed for specific application. And LDROM saves a special program such as ISP code which provides booting control and firmware upgrade functions. Data flash can be use to save some user data.
以下为我的翻译,若可以看懂英文请不要看我翻译的(我英文很差)
内部FLASH可以被分成三个区,LDROM,,APROM,Data Flash。
APROM通常用来存储IDE(如:KEIL)开发的应用程序代码。
LDROM用于存储一些特殊代码,如用于固件升级的ISP。
Data Flash可以保存一些用户数据。

使用特权

评论回复
板凳
heisexingqisi| | 2016-7-31 22:44 | 只看该作者
类型是必须前后一致的,如果不一致很可能在数据位的操作上出事情。

使用特权

评论回复
地板
gejigeji521|  楼主 | 2016-8-6 11:51 | 只看该作者
用DMA时,1byte传输,数据手册中要求地址要字对齐,由于是外设与内存之间使用dma,定义的数组在程序中换了定义的位置结果导致数据不正确,debug时还进入HardFault_Handler中,调整数组定义的地址就可以了。

使用特权

评论回复
5
zhuotuzi| | 2016-8-6 13:59 | 只看该作者
一般单片机中只有2 3种数据,例如 FLASH(程序)、RAM/SRAM(数据)、EEPROM(数据),新唐的有好多个

使用特权

评论回复
6
zhuotuzi| | 2016-8-6 14:40 | 只看该作者
Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。

使用特权

评论回复
7
zhuomuniao110| | 2016-8-6 20:36 | 只看该作者
Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。

使用特权

评论回复
8
稳稳の幸福| | 2016-8-6 23:47 | 只看该作者
用DMA时,1byte传输,数据手册中要求地址要字对齐,由于是外设与内存之间使用dma,定义的数组在程序中换了定义的位置结果导致数据不正确,debug时还进入HardFault_Handler中,调整数组定义的地址就可以了。

使用特权

评论回复
9
天灵灵地灵灵| | 2016-8-7 09:49 | 只看该作者
Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。

使用特权

评论回复
10
捉虫天师| | 2016-8-7 13:12 | 只看该作者
  Memory Management Fault:访问了内存管理单元(MPU)定义的不合法的内存区域,比如向只读区域写入数据。

使用特权

评论回复
11
734774645| | 2016-8-7 18:38 | 只看该作者
   Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。

使用特权

评论回复
12
gejigeji521|  楼主 | 2016-8-8 22:06 | 只看该作者
若不是频繁操作,使用FLASH当EEPROM足矣。

使用特权

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

本版积分规则

177

主题

2224

帖子

8

粉丝