Microchip
直播中

刘斌

8年用户 252经验值
私信 关注
[问答]

PIC24 FatFs的C语法问题有哪些

请不要煽动我,但我想从PIC24F的FatFs示例中得到以下代码片段的解释:SPI1BUF寄存器的两个赋值行对我来说毫无意义……每行的最后一句话只是对SPI1BUF的引用,但是当它被厄特?看起来很奇怪……首先,它将一个值从buff分配给SPI1BUF并递增,然后等待设置标志,然后呢?没有赋值或者它只是引用寄存器……也许编译器会拒绝或者完全删除它?我试图将FatFs示例用于我的硬件,因此我将检查代码,用定义替换所有硬件引用,以便代码可以更容易地在其他板上重用。:(

回帖(16)

王焕树

2020-4-24 11:34:22
顺便说一下,查看编译器的LST输出,看看那个源生成了什么,这非常有用。这样你就不必猜测它是如何解释源的了。
举报

王焕树

2020-4-24 11:41:34
不,这意味着读和写,这将触发另一个转移。正如你的句子的其余部分所说的,这只是一个阅读。
举报

康辅佑

2020-4-24 11:51:36
同意,我的坏。这里是一个分解列表(编辑显示符号值):
举报

丘素莉

2020-4-24 11:56:59
BobAGI,只是对您发布的代码的注释。值得注意的是,许多“现成的”代码对于芯片来说并不优化。我不确定您使用的是哪一个芯片,但是我使用的所有FJ都具有增强的SPI模块。代码明显地写16位字,但是使用字节!SPI具有16位模式。为了与8位兼容,编写了大量的s/w,包括大部分MChip。代码使用Rx标志来等待发送的字节在启动另一个之前发送。这是一种“懒惰”的技术,会导致SPI输出中的“口吃”,而不是恒定流。即使STD模块也不应该像这样操作,更不用说增强了。有关RX缓冲区的查询读取。对于只读操作(EEPROM、FLASH等),不需要为RX服务。是的,它会溢出,但是什么呢?在执行读取操作之前只需清除标志。这是阻塞代码,长缓冲区写入(和读取)最好通过中断(甚至DMA)作为“服务”来完成。使用控制/状态信号来指示忙碌/故障/成功等。即使没有int或dma,SPI也应该设置为轮询服务,如果端口已满/忙,则跳过该端口。我作出这些评论的原因是,像16MHz FJ这样的慢cpu需要从其外围设备获得的所有帮助。!!!我使用有4K缓冲区的芯片,阻止代码让FJ入睡!!!!希望这有助于Yorky。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分