问题标签 [xc16]

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.

0 投票
2 回答
380 浏览

c - 未声明(函数中首次使用)错误/XC16

选择“构建主项目”并尝试编译我的项目时,编译器不断显示以下错误消息:

我相信这与我的#define 代码行有关,但我不确定:

也许我的“定义”命令的位置不正确?还是我忘记了某种代码行?我觉得我想太多了。

0 投票
0 回答
86 浏览

c - 结构指针的元素指向C中的另一个地址

我有一个用于电机控制应用的 C 结构,该结构具有 PID 的元素。我创建了 2 个具有该结构的变量和 2 个指向这些变量的指针。我的应用程序在微控制器上,所以我还有一个对 PID 工作非常重要的寄存器,即编码器计数。所以我想让我的指针指向它们各自的 PID 变量,但我想让元素“编码器”指向微控制器的编码器寄存器。这样当我访问指针时,我可以直接获取编码器位置。

我没有尝试上面的代码,因为我 100% 它不会像我想要的那样工作。取消引用元素编码器并分配编码器位置寄存器的地址只会将地址编号放入编码器元素中。它只是为了展示我想要完成的事情。但我不知道该怎么做。

在我希望能够调用函数而不需要在函数本身中包含编码器计数之后。

现在我做这样的事情:

当我调用这个函数时,我总是将当前的编码器计数(单片机的编码器计数寄存器的值)放在 StartPosition 中。

我想做这样的事情:

一切都指向 PID1 或 PID2 变量,但元素编码器指向微控制器的编码器计数寄存器。

我怎么能做这样的事情?谢谢你。

编辑:我使用带有 XC16 编译器的微芯片微控制器。
我像使用普通变量一样使用 POS1CNTL:
我可以像这样读取它:A = POS1CNTL;
或者我可以给它写一个值,比如:POS1CNTL = 30;

POS1CNTL 定义如下:
#define POS1CNTL POS1CNTL
extern volatile uint16_t POS1CNTL attribute (( sfr ));

0 投票
1 回答
186 浏览

pic - XC16 v1.5 默认使用什么 C 标准?

对于默认情况下使用的 C 标准 Microchip 的 XC16 v1.5 编译器(xc16-gcc -> options = empty),我找不到明确的答案。

如果我们将它指定为 ,我们显然会得到不同的结果-std=C99,但是从什么开始?!?

0 投票
0 回答
75 浏览

c - 将 XC16 集成到 Visual Studio Makefile 项目中

是否有人在 Visual Studio 中成功创建了一个 Makefile 项目,该项目利用 MPLAB X 生成的 Makefile 并将构建针对 PIC24 的代码?还是我需要创建自己的针对 xc16-gcc 的 Makefile?如果在某些时候需要 Microchip 的 IDE,则使用与 MBLAB X 相同的格式将是有益的。

我希望在 C 中创建一个独立于平台的应用程序,目标是编写(和测试)一次,在任何地方使用它;应该存在共性。通过使用构建开关和适当的 Makefile,非常见方面可以启用并针对特定平台。似乎 Visual Studio 将允许我从我读过的内容中采用这种方法,但我找不到任何特定于 PIC 的东西,只有我无法开始工作的 AVR/Arduino。

谢谢。

HL

0 投票
0 回答
40 浏览

pic - XC16 MCU 系列宏

要使用 XC16 检测单个 MCU,我们可以使用诸如 的定义__dsPIC33EP128MC202__,但是对于诸如 的系列的定义是dsPIC33E什么?

谷歌搜索时,我发现对__PIC24F__etc 的引用,但它们都没有在 XC16 中定义。我找不到与整个家庭相关的任何定义,只有特定的 MCU:s。

我知道我可以将自己的定义添加到项目中,但这会涉及人为因素,请记住在每个项目上正确设置/更新它。我想如果在XC__PIC24F__编译器中定义,那么 XC16 在逻辑上将具有相同的系统。

0 投票
0 回答
89 浏览

c - 使用内置 atoi 函数的微芯片 xc16 编译器的意外行为

函数的意外行为atoi()。它在我的代码的某些部分工作并在其他部分返回 0,我在应用程序的不同部分使用以下代码来查找错误。

MPLAB X IDE V5.4、XC16 v1.61

0 投票
1 回答
176 浏览

c - XC16 将数据表放入 PSV 内存 (PIC)

我想在 Flash 中放置一个表格并直接从我的 C 程序中读取它。根据 Microchip 的说法,这是由微芯片完成的,__attribute__((space(psv)))但是,作为微芯片周围的大多数事情,他们自己的示例效果不佳(通常已过时且未更新):https ://microchipdeveloper.com/16bit:psv

所以这就是我想要做的:

当我编译时,我得到:"warning: ignoring space attribute applied to automatic ConfDiskImage"

我正在使用 MPLAB X IDE 5.45 和 XC16-gcc v1.50。微控制器:dsPIC33EP256MC506

关于如何让它留在闪存中(不被复制到 RAM)并用指针直接从闪存读取它的任何想法?

0 投票
1 回答
73 浏览

c - XC16 编译器局部变量赋值不起作用

我正在使用带有编译器 XC16 的 PIC30F4011。我注意到局部变量的赋值不起作用,但是如果我将变量声明为全局变量,它就起作用了。

在下面的函数中,在赋值语句: 之后addr = b_flashStart;addr应该是0x1600,但实际上是0

这是整个文件:

0 投票
0 回答
175 浏览

c - 尝试使用 xc16-gcc 编译/链接时出现 Ceedling 错误

我正在尝试为我的 Microchip 嵌入式系统进程实现测试驱动开发,并尝试通过 Ceedling(Unity、CMock 等)来实现。我一直在尝试遵循本教程:https ://spin.atomicobject.com/2012/10/22/getting-started-with-tdd-for-microchips-pics/但遇到了一些问题。我已经完成了所有步骤,但无法正确链接我的代码(至少我认为链接是问题所在)。以下是我执行“ceedling test:all”时的输出

我正在关注的教程有点过时了,所以我可能遗漏了一些与教程发布时有所不同的东西。任何帮助将不胜感激!

更新:

我的 yaml 文件设置不正确,因为我的项目部分中有 :release_build: FALSE 但 :test build: 部分被注释掉了。如果我注释掉 :release_build: FALSE 那么它会正确编译和链接但是我得到一个不同的错误:

0 投票
1 回答
184 浏览

c - __inline__ 和 __attribute__ 混淆 Doxygen

(已解决,请参阅最后的解决方案)

我在一个嵌入式 C 项目中,并编写了一个仅包含静态强制内联函数的 .h 文件。我已经这样记录了它们:

FORCE_INLINE定义为

问题线将扩展为:

__attribute__已添加到该EXCLUDE_SYSMBOLS部分,因此它们不会被记录为函数。

问题是 Doxygen 似乎被这条线弄糊涂了FORCE_INLINE __attribute__((unused))。似乎它不同步并跳过了文件中间除了一个之外的几乎所有功能。该函数的格式与其他所有人完全相同。

Doxygen 还将某些函数的部分参数和代码片段记录为全局变量。

我也尝试打开MACRO_EXPANSIONEXPAND_ONLY_PREDEF并添加FORCE_INLINE到该EXPAND_AS_DEFINED部分。没有不同。

我也尝试将它们添加到EXCLUDE_SYSMBOLS

作为测试,我将@fn命令添加到 Doxygen 看不到的功能之一,并生成了该功能的所有文档。但是我不能添加@fn到每个函数中,也不能将代码片段记录为全局变量。

有谁知道如何让 Doxygen 忽略FORCE_INLINE __attribute__((unused))每个函数前面的?

解决方案
@KamilCuk 给了我一个想法,所以我将它添加到我的头文件中:

然后替换FORCE_INLINE __attribute__((unused))FORCE_INLINE_SILENT. FORCE_INLINE在另一个头文件中定义。