问题标签 [mplab]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 使用 PIC18 将数据保存到外部 EEPROM
我有 PIC18F87J11 和 25LC1024 外部 EEPROM,我想在上面存储一些数据,以便以后读取。我做了一些研究,但不幸的是,我找不到使用与我类似的板的教程。我正在使用带有 C18 编译器的 MPLAB IDE。
注意:另外两个链接写为下面的评论。
这就是我的问题所在...
为了写入 25LC1024 外部 EEPROM,我按照微芯片的教程进行操作。第一个问题是这个 tut 是为 PIC18F1220 编写的,而我使用的是 PIC18F87J11。因此,在打开项目时,我得到两个文件未找到错误,但我只是忽略了它们。
我将文件AN1018.h和AN1018_SPI.c复制到我正在处理的项目中,并从AN1018.c文件中复制了一些代码。
AN1018.c 文件中的代码
我的第二个问题是输出消息始终是1e0。换句话说,我不知道写入是否成功。我也不确定我可能会错过什么。
如果我能得到某种帮助,我将不胜感激。总而言之,我想将数据存储到我的外部 EEPROM 并在需要时保留它。请知道我是微控制器编程的初学者。
c - 如何将两个字节数组转换为无符号长变量?
我想将两个字节组合成一个无符号长变量,我当前的代码不起作用。我正在使用 MPLAB C18 编译器,这是我的代码。
请让我知道为什么我没有得到 1233 作为我的输出。
c - 无法适应数据存储器部分的部分错误?
这是我的问题的简要总结...
我无法将协调器的数量增加到 16 个以上,并且连接表对于 PAN 和协调器是有限的。PAN 在其连接表中最多可以有 16 个节点,而 Coordinator 仅支持 8 个节点。我有 PIC18F87J11 系列,我正在使用 MPLAB C18 编译器。
协调员:
协调器可以将 NUM_COORDINATOR 设置为 16 ,但其连接表中仅显示 8 个节点。CONNECTION_SIZE 必须为 8 或更低,任何更高的数字都会产生错误。
将连接大小从 8 增加到 16 会产生以下错误。
将协调器的数量从 16 增加到 32 会产生以下错误。
平底锅:
PAN 可以将 NUM_COORDINATOR 设置为 16,并在其连接表中显示 16 个节点。CONNECTION_SIZE 必须为 16 或更低,任何更高的数字都会产生错误。16 个节点已连接到网络后,终端设备无法连接到网络。
将连接大小从 16 增加到 32 会产生以下错误。
将协调器的数量从 16 增加到 32 会产生以下错误。
这是我用于ConnectionTable的代码
这是我用于RANDOM_SEND_BUFFER的代码
有人可以向我解释为什么我会遇到这些构建错误吗?
谢谢!
c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB]
我有 PIC18F87J11 系列,我正在使用 MPLAB C18 编译器。我可以给以下变量的最大字节数是多少。
我知道我必须修改链接器文件以达到超过 256 个字节。
这是我干净的链接器文件。
这是我修改后的链接器文件,赋予 CONNECTION_TABLE 超过 256 个字节。
如您所见,我的CONNECTION_TABLE从 开始0x100
并结束于0x999
. 如果我想给它更多字节,我可以给它的最大值是多少?
如果您仔细观察,您会注意到我有以下代码。
这是否意味着CONNECTION_TABLE不能得到更多0xFFF
?
我几乎想将CONNECTION_TABLE的字节数加倍,我该怎么做?
目前我的开始0x100
和结束于0x999
,我可以将结尾更改为0x1332
吗?或者那行不通,因为我会越界0xFFF
?
谢谢!
c - unsigned int 和 unsigned char 之间的比较
我有一个无符号字符数组,例如Data[2]
. 我需要它与返回 unsigned int 的函数的输出进行比较。
我试图将其Data[2]
转换为 unsigned int ,反之亦然。它没有用。
我想做的是:
ReadFlash2
是一个返回 unsigned int 的函数,Data[2]
而是一个 unsigned char。
我尝试对它们中的每一个进行施放,但没有奏效。
有什么我做错了吗?我应该投哪一个,我应该投什么?
谢谢。
编辑:Readflash 函数的代码:
c - DMA interrupt for SPI
I'm trying to recreate a project of writing to an SD card (using FatFS) for a dsPIC33FJ128GP802 microcontroller.
Currently to collect the date from the SPI I have a do/while that loops 512 times and writes a dummy value to the SPI buffer, wait for the SPI flag, then read the SPI value, like so:
I'm trying to recreate this using the DMA intterupts but it's not working like I had hoped. I'm using one DMA channel, SPI is in 8 bit mode for the time being, so DMA is in byte mode, it's also in 'null write' mode, and continuous without ping pong. My buffers are only one member arrays and the DMA is matched.
From what I understand from the null write mode, the DMA will write a null value every time a read is performed. However, the DMA wont start until an initial write is performed by the CPU, so I've used the manual/force method to start the DMA.
The interrupt will now start, and runs without error. However the code later shows that the collection was incorrect.
My interrupt is simple in that all I'm doing is placing the collected data (which I assume is placed in my DMAs buffer as allocated above) into a pointer which is used throughout my program.
When the interrupt has run 512 times, I stop the DMA and throw a flag.
What am I missing? How is this not the same as the non-DMA method? Is it perhaps the lack of the while loop which waits for the completion of the SPI transmission (while (!_SPIRBF);). Unfortunately with the null write mode automatically sending and receiving the SPI data I can't manually put any sort of wait in.
I've also tried using two DMA channels, one to write and one to read, but this also didn't work (plus I need that channel later for when I come to proper writing to the SD card).
Any help would be great!
c - 如何将 4 个字节转换为无符号长变量?
如何正确地将 4 个字节转换为一个无符号长变量?
我正在 MPLAB C18 上编程 PIC18,这是我的代码。
这是我不断得到的输出, 秒:255
谢谢!
eclipse - MPLAB (Eclipse) 中的 Mercurial 构建后提交
我有一个关于将 Mercurial 与 MPLAB(基本上只是 Eclipse 的包装器)一起使用的问题。
我想知道是否可以添加一个构建后步骤来将项目提交到 repo。
现在,我们只是用蛮力的方式来做;我们将“经常提交”部分发挥到了极致。我的同事设置了一个 Windows 事件,每 15 分钟执行一次,该事件运行他编写的脚本,将我们工作目录中的所有内容提交到 repo。这对于确保您不会遗漏任何内容(当他的计算机打开时)非常有用,但也有很多时候提交损坏代码的缺点。
我不禁认为必须有一种更简化的方式来处理我们的提交。我已经阅读了多个关于 Hg 的教程/wiki,但没有什么特别的;一切都更加“总体概述”。
c - 设置输出端口高低 C
我正在使用 MPLAB 使用 CCS 编译器在 C 中编译程序。
我想使用定义的端口将输出端口设置为高或低。
所以,我想设置我portOut1
的高或低。
我已经使用了 3 种方法来做到这一点,但只有一种方法奏效了。但我对此并不满意。
1:(不起作用,为什么?)
2:(不起作用,为什么?)
3:(显然工作)
我不明白为什么第一种和第二种方式不起作用。
而且我不想使用第三个,因为除非我发表评论,否则我不知道这个 pin 做什么,而且我认为这不是一个好的程序实践。
任何人都知道这样做的方法吗?或者我做错了什么?
linux - Linux 上的 MPLABX 和 Microchip 库文件名中的空格
我认为这是将一组“帮助”或“库”文件从 Windows 世界带到 Unix/Linux 世界的问题。有没有其他人遇到过 MPLABX 项目可以在 Windows 机器上编译而在 Linux 机器上无法编译的问题。它开始看起来像是在由 Microchip 编写和分发的 C 代码深处的文件名中的空格在 Linux 机器上没有得到正确处理。也就是说,一些工具可能对 Microchip 选择使用的文件名中的空格“正常”,而其他工具则说他们找不到文件。
Windows 和 Linux 都在同一台“双启动”机器上运行。项目文件是从同一个 SVN 存储库中新签出的。而且我相信 MPLABX 的两个副本都是最新的。很难想象有任何其他方法可以消除其他差异。这使得 MPLABX 处理文件的方式成为少数剩余的差异之一。
-谢谢