问题标签 [c18]

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 投票
1 回答
484 浏览

c - C18 伪变量

我正在寻找一种使用 C18 编译器在 C 中制作类似 Jalv2 的伪变量的方法。伪变量是类似于变量但实际上是函数的东西。

在 Jalv2 中,可以像这样制作一个伪变量:

现在可以读取和写入the_var,而实际上执行了这些功能:

C有类似的东西吗?

0 投票
2 回答
594 浏览

c - 让 C18 抛出编译器错误

有没有办法让 C18 编译器在编译期间抛出自己的自定义错误消息?

例如,考虑具有两个用户定义设置的情况:

假设这些设置不能同时是 0x00. 当用户将两个设置都设置为 时,有没有办法让编译器抛出错误(或至少是警告)0x00

0 投票
2 回答
344 浏览

c - C 如何处理 if 语句中的非布尔值?

我有时会在 C 程序中看到这一点(我使用的是 C18 编译器):

我知道当你给一个if循环一个布尔值(unsigned在 C18 编译器中)时会发生什么,但是当你把一个非布尔值放进去时会发生什么?

我的猜测:doStuff()当值不为零并且值为零时,它会发生doOtherStuff()。但是我不知道这个,所以我想得到一些参考。

0 投票
1 回答
1840 浏览

c - 可疑指针转换警告

我正在使用 Microchip 的 C18 编译器编译我的 C 代码。我[2054] suspicious pointer conversion在这段代码中收到警告:

这个警告是什么意思,我该如何解决?

0 投票
1 回答
3525 浏览

c - 链接步骤找不到符号(XC8 编译器)

我正在尝试使用 XC8 编译器编译和链接 C 程序。我从 C18 编译器进行了更改,并对代码进行了一些小的兼容性更改。使用 C18,代码编译和链接得很好。使用 XC8,编译正常,但链接步骤失败并出现以下错误:

随着编译成功,我想找到了原型,因此.h文件包含在内。我猜编译器找不到.c文件。

该函数putch没有在我自己的程序调用,但它被调用putchar并且我使用该函数。开头的函数ENC_是我自己的函数。

我在 XC8 工具包的“包含搜索路径”中添加了两条路径:

  • C:\Program Files (x86)\Microchip\xc8\v1.12\sources,我相信编译器的.c文件所在的位置
  • C:\...\lib,我自己的.c文件所在的位置。

但是,我仍然收到错误消息。

我该如何解决这个问题?

这是完整的日志:

0 投票
1 回答
565 浏览

syntax - C 宏语法错误(C18 编译器)

尝试编译此宏时出现语法错误。我必须使用宏,因为 C18 不支持函数内联。使用常规函数调用将导致编译器具有更大的 ISR 开销(通常它是大约 10 条汇编指令,而函数调用则变为 50 条)。

我检查了,没有尾随空格。

当我调用宏时,编译器引发了语法错误:

谢谢你。


没关系,我找到了答案。问题是我在“调用”宏时使用另一个宏作为“输入参数”。由于它是一个宏,它只是一个替换,所以没有创建内部/临时变量。

所以,我通过这样做来修复它:

谢谢你们!:)

PS:我试图回答这个问题以关闭它,但在发布8小时之前我无法做到。所以,我只是把答案放在这里。

0 投票
2 回答
3512 浏览

c - 使用 PIC18 的 C18 库中的延迟函数实现长延迟

我使用的是 Fosc = 10MHz 的 PIC18。因此,如果我使用 Delay10KTCYx(250),我得到 10,000 x 250 x 4 x (1/10e6) = 1 秒。

如何使用 C18 中的延迟功能进行很长的延迟,比如 20 秒?我正在考虑只使用二十行Delay10KTCYx(250)。还有另一种更高效、更优雅的方式吗?

提前致谢!

0 投票
1 回答
76 浏览

arrays - 在多文件嵌入式项目的情况下将数组定义为全局

我一直试图在 mplab c18 中将数组声明为全局数组,但从未取得太大成功。是否有任何可能的方法来访问数组元素,或者我们可以将数组声明为全局 /extern 并从其他源文件访问。

0 投票
1 回答
8033 浏览

c - C中的字符数组比较

我有以下函数来比较 C 中的两个 char 数组:

在主要的某个地方:

它在 i = 0时立即返回0。如果我将函数更改为:

...它就像一个魅力。在函数测试调试器的第一个版本中,缓冲区和字数组是 char* 类型。在函数测试的第二个版本中,它说缓冲区是 char* 类型,而测试数组是 char[] 类型。函数 strcmp() 也不起作用。

这里实际上有什么问题?程序是为PIC单片机编写的,编译器是C18,IDE是MPLAB。

0 投票
2 回答
2277 浏览

c - 用 C18 读取 pic18 rom 常量

我正在努力理解为什么我在尝试从存储在 rom 中的多维表中读取数据时得到随机数据。

我有一张要在 OLED 屏幕上显示的位图字符表。字符表太大而无法放入 ram 中,而 rom 是它的自然位置。当我尝试从表中读取元素时,数据不是存储在表中的数据。

这是我尝试做的。我在使用它的 C 文件的请求中将位图声明为多维数组:

这是我尝试读取数据并将其打印到屏幕的地方:

PutImage函数的实现:

如果我更改它以使数据适合 ram,它就可以正常工作。所以问题要么是数据一开始没有正确存储,要么是我使用它的方式不正确。

我使用的图片是 18F27J53,数据表第 7.1 节(表读取和表写入)讨论了一些用于在程序存储器和 ram 之间移动字节的汇编器操作。当我使用 C 时,我不确定这是否是我需要注意的事情,或者编译器是否知道如何处理它。