问题标签 [hi-tech-c]
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 - Hi-Tech C 编译器:#define:“获取此对象的地址是非法的”
我正在尝试使用 Hi-Tech C 编译器为 PIC16F77 微控制器编译代码。
下面的代码在下面代码段的最后一行给出了一个错误。错误是:
我已将问题缩小到以下几点:
(ADCON0
是具有用于控制 ADC 的标志的 8 位寄存器。)
知道代码有什么问题吗?
谢谢
c - 将 HiTech C 库与 MPLAB MCC18 结合使用
有没有人尝试过将 Hi-Tech PIC18 C 库与 MPLAB MCC18 编译器和链接器一起使用?我们是一个小团体,收到了一个用 MCC18 编写的遗留项目。我们有兴趣使用 Hi-Tech 编译器的更标准和扩展的 printf/sprintf 函数。监管问题使我们无法简单地切换到 Hi-Tech 编译器。
具体来说,我们正在尝试替换以不同方式处理 ROM 和 RAM 字符串数据的弱 MCC18 方法(putsUSART 和 putrsUSART),并使用标准 printf,它不关心数据是基于 ROM 还是基于 RAM。此外,我们希望 printf/sprintf 也能处理浮点数,而无需编写我们自己的 ftoa() 函数。
我过去使用过 Hi-Tech 编译器,它们的 stdio 功能与 MCC18 的功能不同,使用起来很愉快。我们有两个编译器,所以我正在考虑使用 HiTech 编译器创建一个 .LIB,然后将其与 MCC18 代码库链接。
任何尝试过或使用过它的人的评论将不胜感激。
c - 变量声明冲突,类型重新声明
我有这些错误和警告......我对编程很陌生,我不知道这意味着什么。你们能看看这个并告诉我我做错了什么吗?
提前致谢
错误和警告:
有错误的代码(我已将错误的行号放在描述中):
embedded - 使用 PIC 16f777a 开启/关闭
我正在使用按钮进行锻炼。当按下按钮时,LED 开始闪烁,再次按下时停止。当我尝试时,LED 在第一次按下时闪烁,但在第二次按下时没有停止。我正在使用带有 HiTech C 编译器的 PIC16F877A MCU。我的代码是:
c - Hitech C 语法
有人可以解释一下这个语法吗?它来自 Hi Tech C 包含文件
c - '错误 ”;” 初始化多个结构时的预期'
我有一个 typdef'd 结构,紧接着在下面我使用 typedef'd 结构同时声明和初始化了我想要的变量。
当我尝试编译代码时,没有与 'hi_aud' 相关的错误消息,但其余结构会显示错误 'error: ";" 预期的'。该数组也提出了这个警告,加上'错误:“}”预期'。
我正在使用 Hi-Tech C compiler v.,它使用 C90 ANSI C 标准。
编辑当我使用'{}'括号初始化数组时,出现另一个错误“错误:声明中没有标识符”。当我使用“[]”括号时,不会发生这种情况。
c - 我们在嵌入式 c 或嵌入式 c++ 中有“@”运算符吗?如果是,请解释我下面的代码?
代码:
此代码来自 PIC16F877A 的 HT-PICC 编译器 pic.h 库文件
我了解 static volatile 和其他关键字的含义。这里 Timer0 的寄存器地址是 0x01 但为什么要@
放在前面呢?它与指针有关吗?
c - 如何修复 68HC11 编译器生成无效的 JMP/BRA 代码
我正在编译 C 代码以对设备的 EPROM 进行编程。使用的编译器是 Hi-Tech C Compiler。我相信它是 7.80 版本。
当我(重新)制作我的代码时,它会生成一个二进制 (*.BIN) 文件,用于闪存到 EPROM。
我发现编译后的代码通常在程序集中带有一行代码,这会破坏代码并导致设备在到达时关闭。似乎编译器正在将 Branch-Always (BRA) 语句更改为错误地执行BRA 0
,当转换为十六进制操作码时JMP 0000
,编译器会将其转换为。这会导致代码到达代码的意外区域,从而导致设备关闭。
重新制作代码时,这个错误的分支总是在同一个地方。但是我发现,如果我对代码进行小幅更改,不同的 BRA 调用会得到完全相同的损坏。
我现在觉得我需要深入研究 *.BIN 文件本身,找到错误的 BRA/JMP 调用,然后手动修复它。这样做的问题是,每当我对代码进行更改然后创建一个新的二进制文件时,我都需要追踪这个错误的 BRA/JMP 调用,计算应该存在的 BRA 调用的正确操作码是什么,并自己编辑。我宁愿每次进行更改时都不必这样做,因为这会占用大量时间。
这是错误 BRA 调用及其周围代码的示例。很抱歉,我无法为此提供完整的源代码,因为它适用于专有系统,但我可以围绕该问题分享汇编代码和十六进制代码。
等效的 C 代码,并添加了错误 BRA/JMP 发生位置的注释:
这是来自已编译的 *.AS 程序集文件:
上述bra 0
程序集无效。在这种特殊情况下,根据汇编文件中的标签,它应该是bra l28
(注意,这是 L28,带有小写 L,以避免混淆。它是在汇编代码中定义较低的标签,其中此分支应该去)。
这将产生以下十六进制操作码:
以下摘录来自 *.LST 列表文件。
可以看出,它将 转换bra 0
为JMP 0000
(7E 0000)。
我想找到一个可以彻底解决这种情况的解决方案,这样编译器就不会再破坏程序集中的随机 BRA 助记符,不需要我挖掘二进制文件、找到 JMP 调用并手动修复它。是时候更改代码了。
为了澄清,我理解这BRA 0
与 不同JMP 0000
,但是编译器出于未知原因(1)放入BRA 0
程序集文件而不是BRA l28
它应该是什么,以及(2)JMP 0000
在创建二进制文件时将其转换为。