OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6245|回复: 10

在学习原子程序的过程中,有些不懂的,都会在这个贴,贴出,希望原子及各位大神与以解答,谢谢各位了。

[复制链接]

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-4-10 11:27:43 | 显示全部楼层 |阅读模式

const u8 TEXT_Buffer[]={"WarShipSTM32 SPI TEST"};
1、首先在数组 里面加""是代表是字符吧?

#define SIZE sizeof(TEXT_Buffer)  
2、然后这个 数组 的长度 我实在不懂, 这个SIZE 的长度是什么呢?
 SPI_Flash_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);
3、还有这个 TEXT_Buffer 为什么要强制 定义为 u16 的指针?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2012-11-17
在线时间
18 小时
发表于 2014-4-12 01:31:14 | 显示全部楼层





位了便于讲解,画了个草图用手机拍下来……用其他软件编辑太慢,好吧我承认,是我不会用,这是我想到的最快的方法了。

这个草图应该能说明问题了, 扇区0 顶端那个基址就是 STM32_FLASH_ADDR,下面最长的那个红线就是 WriteAddr 所在的起始地址,也就是数据从这个地址开始往下开始写。

这里的扇区 N = secpos,也就是计算出将要开始写数据的那个地址位于哪一个扇区。然后就判断该扇区还有多少剩余的空间没用到(图中红色阴影部分), 如果我们所要写的数据量少于这部分空间,我们直接将数据一次就写到这里就完事了。如果数据量比这剩余空间还大,就意味着数据将会写到扇区(N+1),也就是超出红色阴影部分的下面了,这就是跨扇区写数据了,所以就只能先把红色阴影部分写完,再接着在扇区N+1写数据的。 

 这么操作的原因只有一个,连续写数据是不能跨扇区的,最多只能是先连续写完一个扇区,然后再到下一个扇区连续写,具体反映到软件上就是软件至少要进行2次以上写数据操作,而不能只进行一次写操作就完成的。

希望这个说明能让你明白。

如果小弟我说的有什么不对,请诸位大神斧正











回复 支持 1 反对 0

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-4-10 11:37:48 | 显示全部楼层
兄弟,这是c基础,慢慢积累吧
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
 楼主| 发表于 2014-4-10 11:50:13 | 显示全部楼层
回复【2楼】wangyan915205:
---------------------------------
不是,您要帮我解答阿??
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-10 12:59:35 | 显示全部楼层
回复【楼主位】shaofeng03:
---------------------------------
1、你的理解正确
2、百度一下sizeof()函数的用法和功能解释
3、将写入数据的指针指向TEXT_Buffer,8位的指针吧,没用到16位的喔。。。具体可以goto到这个函数里面看看研究一下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
 楼主| 发表于 2014-4-10 14:56:52 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
哦,,sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回
值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值。
TEXT_Buffer 是u8 ,所以是占一个字节,里面有10个,,还有系统 在后面会加一个NULL终止符,所以应该是占11个字节 ,这么算对吗?
SPI_Flash_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);
3、还有这个 TEXT_Buffer 为什么要强制 定义为 u8 的指针?
这个还是不理解阿。。。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-10 15:58:14 | 显示全部楼层
回复【5楼】shaofeng03:
---------------------------------
这个函数圆形是这样的SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   

自己分析一下就知道怎么回事了,C的基础来的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-10 17:06:10 | 显示全部楼层
C语言不熟会很累的,先C语言吧,入门很快的,就是注意先别玩指针,不然刚入门玩指针会吐血的
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
 楼主| 发表于 2014-4-11 13:07:48 | 显示全部楼层
offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.
secpos=offaddr/STM_SECTOR_SIZE; //扇区地址  0~127 for STM32F103RBT6
secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)
secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小   
if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围


原子的这部分程序,,有些不懂,,请高人,,解释一下。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-11 16:08:02 | 显示全部楼层
实在看不懂,就直接用吧,直接调用我们的函数得了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-12 01:47:08 | 显示全部楼层
回复【10楼】bj2008wyou:
---------------------------------
非常不错,cool
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 14:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表