一.总线带宽计算
带宽:是指计算机每秒钟由存储器读取的二进制数据的位数。
总线带宽:指这条总线在单位时间内可以传输的数据总量。
总线周期:一个总线周期由几个时钟周期组成。
---例题1:某计算机字长16位,存储器存储周期为500ns,存储器带宽----32Mbit/s.
计算:(1秒钟访问RAM的次数)1/500ns;每次访问RAM读取16bit;所以带宽=16bit*1/500ns=32Mbit/s
---例题2:假设某系统总线在一个总线周期中并行传输4字节信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线的带宽是:---20MB/s。
计算:由题目可知,一个时钟周期传输的字节数是2B,总线时钟频率是10MHz;2B/时钟周期*10MHz=10MB/s;一个时钟周期=1Hz。
二、在watch1窗口中查看中断中的变量值;数值一直在跳变,但是根据串口打印的数据,数据是正常的;
原因;watch1窗口中的显示是有延时的,而中断中的数据确实实时变化的,从而造成了错位(跳变)。
三 、最近调试一块芯片的flash,发现控制flash读写之后,烧写程序就会出现报错--->Too many errors to display !;
1.情景:调试一块新的芯片,擦除、编程函数对方有给,读函数是自己写的(厂商提供的固件库中没有读函数o(╥﹏╥)o);
2.问题-现象:我执行了擦除、编程、读数据后;再次下载程序会报错--->Too many errors to display !只有重新上电才能烧写;
之定位到,我执行了读函数后,程序再次下载会出问题;
3.原因:
------需要提前说明的是,芯片的flash提供了2个存储空间,一个是主闪存存储区,一个是用户存储区;程序运行时执行的就是主闪存存储区,我们所操作的就是用户存储区;
------所以在,读函数中,我将读取的区域设置为用户存储区,之后并没有将flash的指向区域恢复为主闪存存储区,从而导致下载时的地址出错;实际测试就是这个问题。
四、STM32F1,GD32F1使用KEIL仿真时,一直卡在了SystemInit()配置系统时钟的函数中,为什么?
同时打印的还有错误信息:*** error 65: access violation at 0x40021000 : no 'read' permission,为什么?
1.首先回答第一个问题:因为SystemInit()配置系统时钟的函数中,有一个等待内部RC 倍频稳定的函数,但是因为你是软件仿真,没有实际的晶振怎么能实现稳定的倍频!所以会一直卡在那里。
---推荐使用硬件仿真,方便。
2.第二个问题我在网上找到了一个解释很好的博客,上网址:https://blog.youkuaiyun.com/beready/article/details/24668529;
五、单片机寄存器中的保留位,是否可以改变其值?
1.单片机中存在保留位,原因是现有的位数已经能够满足我想要的功能,所以剩下的位就保留了下来,但是不确定我之后在扩充的时候不会用到;从这个原因上看,是可以修改保留位的默认值的,因为不会对其他硬件造成影响;
但这只是理论上的不影响,具体是否会影响其他硬件,对于使用者来说只有在实际中观测才知道的;
2.在网上,查询关于这方面的消息,有人就遇到过,修改了保留位造成了程序不时会出现未知错误,所以为了系统的稳定性,还是不要对保留位进行修改;
结论----不推荐修改保留位。
六、HEX和BIN文件
1.HEX文件中带有地址信息,所以下载时直接下载就行;BIN文件中没有地址信息,所以下载时需要选择起始地址和终止地址;
2.HEX文件的大小并不是看到的文件的大小:原因1-HEX地址使用ASCII来表示数据;原因2-HEX文件本身还包含别的附加信息;
3.BIN文件看到的大小就是最终下载到程序中的大小;
七、KEIL5调试中出现 #11-D: unrecognized preprocessing dir问题。
1.原因是:include 拼写错误。