问题标签 [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.
bit-manipulation - PIC C18:从一个字节中读取位
我有一个非常基本的问题。但是,无论我尝试过什么,我都无法成功实现这一点。
我有一个移位寄存器(74LS164)连接到 PIC18F2550,硬件配置如下:
LED 连接到 74LS164 的输出引脚以查看其状态。我有一个 8 位变量声明为unsigned char
. 我想将此变量的位发送到移位寄存器。移位寄存器具有内部触发器,其输出命名为 Q0-Q7。第一个发送的位加载到 Q0,当您发送第二个位时,前一个 Q0 移动到 Q1,新发送的位到达 Q0,并且在您发送后续位时如此继续。发送完成后,变量的 LSB 应该在移位寄存器的 Q0 上,MSB 会在 Q7 上。
我的代码是这样的(语言是 C18):
上面的代码没有按我的意愿运行。当我运行它时,所有的 LED 都会亮起,就好像我已经加载0b11111111
到ucRegister
变量中一样。
但是,以下一个效果很好:
我的代码有什么问题?我认为错误最有可能在线上SCLCD_DATA = ((ucRegister & 0b10000000) == 0b10000000) ? 1 : 0;
,但无论我怎么看,它对我来说都很好。我的代码有什么问题?
任何帮助将不胜感激。
embedded - PIC C18:将双精度转换为字符串
我正在使用 PIC18F2550。使用 C18 语言对其进行编程。
我需要一个将双精度转换为字符串的函数,如下所示:
在主程序中这样调用:
c - 以 4 个单字节解析 IP 地址字符串
我正在使用 C 语言在 MCU 上编程,我需要将包含 IP 地址的以空字符结尾的字符串解析为 4 个单字节。我用 C++ 做了一个例子:
此代码在新行中的每个字节打印 192、168、0 和 1。现在我需要单个 char 中的每个字节,例如 char byte1、byte2、byte3 和 byte4,其中 byte1 包含 1,byte4 包含 192... C。 :(
c - C18:在代码中表示 LONG 和 FLOAT 常量
long
代码中的和数字是否需要特殊表示float
?
在使用 C/C++ 进行计算机编程时,我们f
在一个类型化的常数后面加上一个字母,float
以区别于double
类型。在 C18 语言中,我们应该/必须做同样的事情吗?
长款呢?
c - C18:未使用的库函数会占用 EPROM 中的空间吗?
图书馆.h
主程序
我有一个库文件,其中包含很多函数定义。由于未使用的库函数,生成的机器代码大小会增加吗?或者编译器会通过忽略那些未使用的函数来优化代码吗?
IDE:MPLAB 8.43
编译器:MCC18 3.34
PIC:18F2550
c - Microchip C18裸函数
有人知道在 C18 编译器上声明裸函数的方法吗?
裸函数是指没有任何结语和序言的函数。
在 gcc 中我使用:
也许是一个#pragma 或一些技巧来获得相同的结果......??
谢谢!
c - 为什么这个 C 宏会导致语法错误?
这是我第一次在 C 中使用宏,我试图用宏替换我通常放入函数中的大部分代码。这是一个经常使用的中断的一部分,因此我需要尽可能地优化它。阅读文档后,我发现编译器不支持函数内联,我想避免函数调用开销。
代码本身将数据发送到串行输入并行输出移位寄存器,据我所知,没有更短的方法可以编写我需要的代码。
我正在使用 C18 编译器版本 3.41 和 MPLAB X IDE。
所以这是我以函数形式使用的代码:
我已经把函数变成了这个宏:
那么我做错了什么?
更新:我删除了评论,现在在不同的位置出现语法错误。
usb - Microchip PIC (MPLAB/C18) 的 USB HID 代码中的链接器错误
我正在尝试为基本的 USB HID 功能编译一些代码。我正在使用带有 MPLAB 8.43 和 Microchip C18 编译器的 PIC18F14K50。
我正在使用 Microchip 网站上的一些标准文件。这是我的 C 文件,这是我的头文件。
构建时出现以下错误:
执行:"C:\Program Files\Microchip\mplabc18\v3.40\bin\mplink.exe" /p18F14K50 /l"C:\MCC18\lib" /k"C:\MCC18\bin\LKR" "usb_function_hid. o" "usb_device.o" "enumeration.o" "usb_descriptors.o" /u_CRUNTIME /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.cof" /M" C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.map" /W
MPLINK 4.40,链接器
设备数据库版本 1.3
版权所有 (c) 1998-2011 Microchip Technology Inc.
错误 - 在文件“./usb_function_hid.o”中找不到符号“HIDDescriptor1”的定义。
错误:1
链接步骤失败。
该HIDDescriptor1
符号出现在代码中的 2 个位置:C 文件的 PasteBin 行 173 和头文件的 PasteBin 行 356。
此代码直接来自 Microchip。我不确定为什么它不会链接。我认为要么它是为另一个版本的编译器设计的,要么我缺少一些外部依赖项,或者我缺少一些编译器/链接器开关。
关于我需要做什么来构建它的任何想法?
include - 在 MPLAB X IDE 中使用外部头文件
我有一个包含一些 .h 和 .c 文件的文件夹,我想在我的项目中使用头文件。
我已经使用“添加现有项目”将它们包含在我的项目的“头文件”文件夹中,但是当我尝试“#include”它们时,编译器(mplabc18\v3.41)说“无法找到文件 xyz.h”
那么,我应该怎么做才能使用这些文件而不将它们复制到项目文件夹中?
c - C18 Microchip 编译器和 strcmp 函数
我想比较两个字符串:
第一个字符串在我的 main 上方声明:
当我想与 const 字符串进行比较时,我输入了以下行:
该函数从不返回零,解决方案和正确的类型转换是什么?strcmp 是同样的问题!