问题标签 [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.
optimization - 如何为每个函数部分切换编译器的优化级别?
如何为每个函数在不同级别上切换编译器 (xc16) 的优化级别?
例如:
disassembly - xc16获取反汇编(listing.disasm)文件的命令是什么?
我想listing.disasm
为我的项目获取反汇编 () 文件。我当前的编译命令生成 .elf、.map 和 .hex 文件。我如何(或什么命令)产生一个单一的listing.disasm
?注意:我有多个 C 文件,但我需要一个反汇编文件。
我知道 MPLAB X IDE 中有一个选项可以在构建时创建 listing.disasm。但我正在使用批处理文件构建。
编译器:XC16 处理器系列:PIC24F
c - XC16 编译器 - 为 BTSTS 创建内存操作数的内联汇编约束(间接内存寻址)
我正在尝试创建的是调用 BTSTS 指令的高级方法。
到目前为止我尝试了什么:
以上产生以下汇编输出:
但这不是我想要的。该位应直接在内存中设置,以便指令是原子的:
完成它的正确方法是什么?
最接近的方法如下:
这里的“a”是一个全局变量而不是一个局部变量
这次生成以下汇编输出:
它好一点,但是我不想明确指定它周围的大括号 [%0]。编译器/汇编器没有办法知道需要间接内存寻址吗?
编辑:我又尝试了一件事。尽管文档中没有提到“m”约束,但我尝试了它
上面会产生类似的东西
这也是不正确的,不会改变r
。也许没有提到“m”约束,因为它是错误的?
顺便提一句。正确的代码是
或类似的东西
c - UART PIC24 - 接收连续的 ASCII 字符流
我目前正在使用带有 UART 的 PIC24,并且能够接收(Rx)和发送(Tx)字符。当尝试接收连续的字符流时会出现问题,其中开始位和停止位之间没有延迟。
UART设置为;7 个数据位,1 个奇偶校验位和 1 个停止位,1200 波特
在终端上显示接收到的字符时,它表明只有某些字符才能正确打印。我不认为这是波特率错误,因为当开始位和停止位之间的小延迟(即按住键盘上的键)时,我能够正确接收和打印字符。
要读取连续发送的两个字符,我正在执行以下操作。
c - time(NULL) 在 PIC-IoT WG 开发板上返回 0
我正在使用 PIC-IoT WG wifi 开发板开展一个项目。我正在尝试修改演示代码以便能够在我自己的服务器上使用它。该演示在几个地方使用了这样的代码:
每次我打开它时,它都会在 15-20 分钟内尝试连接到服务器,但是这些代码部分没有运行,time(NULL)
似乎返回 0。
据我了解,如果是 PIC 微控制器 time(NULL) 应该返回指令周期数。
为什么返回0?为什么它停止返回0?
microcontroller - 如何将 dsPIC33 HEX 文件转换为二进制文件?
我在 dsPIC33 上的应用程序有一个 HEX 文件,现在我想通过串行方式将文件发送到微控制器。
由于编译器生成的 HEX 文件是 intel hex 格式,我尝试使用 将其转换为二进制文件arm-none-eabi-objcopy
,但正如预期的那样不起作用。
是否有任何工具可以将 HEX 或 ELF 文件转换为 dsPIC33 的原始二进制文件?
delay - 我们可以为 dspic33ep256mu814 控制器的 mplab 中的 xc16 中的 _delay_ms 添加延迟函数的限制是多少?
任何人都可以解释为 dspic33ep256mu814 控制器的 MPLAB 中的 xc16 编译器中的延迟“_delay_ms()”标识符给出的最大限制吗?
提前致谢。
struct - C:访问具有奇数编号的结构时出现地址陷阱错误。成员
我正在使用 MPLABX 和编译器 xc16-gcc 为 16 位 dsPIC33CH128MP508 微控制器开发。我正在编写通过 I2C 从 RTC 读取的代码。我定义了以下结构:
struct 的问题sRTC_TIME_t
有奇数个成员,内存对齐由编译器自动打包。从 RTC 读取也需要打包结构。
当试图读取第一个成员sec
时,代码会使用TRAPS_ADDRESS_ERR = 2, /** Address error Trap vector */
.
sRTC_TIME_t time;
second_reading = time.sec.SECONDS;
当我们在结构中添加第八个虚拟成员时,sRTC_TIME_t
没有错误!
这个问题的根源可能是什么?
atomic - 使用 CPSNE 指令在 dsPIC33F 上进行比较和交换/交换
有没有更好的方法在 dsPIC33F 上实现“比较和交换”的互锁变体?
是否有完全避免 DISI 的变体,因为“[...] 此指令不会阻止优先级 7 中断和陷阱运行。”
c - XC16 反汇编 (uint32) & (uint32) 操作
我正在试图弄清楚一些 uint32 操作在 16 位 dsPIC 上需要多少个周期。我从按位 AND 开始并编写了以下程序:
查看反汇编以查看编译器为程序集提出的内容,我得到以下信息:
20 个周期,6 个 I/O 移动和 14 个内核。这对我来说看起来很疯狂。难道就不能这样做吗?
这将核心周期降至 2,这至少对我来说是合乎逻辑的(2 个 16 位宽的 AND)。我不明白的编译器是什么?