Tag: mplab

如何在MPLAB中将数组中的值存储到变量?

以下代码在CodeBlocks编译器上工作正常但在MPLAB C18编译器上我得不到相同的结果。 我正在使用PIC18单片机。 码 int d[6]; int all; d[0] = 6; d[1] = 4; d[2] = 8; d[3] = 0; d[4] = 0; all = 10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] + d[4]; printf(“%d”, all); CodeBlocks上的输出 :64800 MPLAB上的输出 :-816 究竟是什么问题? 这段代码不应该运行正常吗? 谢谢!

在dsPIC33上吻合FFT

我一直试图让KissFFT在dsPIC上工作,但是在尝试了各种不同的方法之后,输出并不是应该的。 我希望得到一些帮助,看看是否有任何我可能会忽略的配置,或者它是否只是我没有想到的东西? 我在MPLABX中使用dsPIC33EP256MC202和XC16编译器。 声明和内存分配。 int readings[3] = {0, 0, 0}; kiss_fft_scalar zero; memset(&zero,0,sizeof(zero)); int size = 128 * 2; float fin[256]; kiss_fft_cpx in[size]; kiss_fft_cpx out[size]; for (i = 0; i < size; i++) { in[i].r = zero; in[i].i = zero; out[i].r = zero; out[i].i = zero; } kiss_fft_cfg mycfg = kiss_fft_alloc(size*2 ,0 ,NULL,NULL); 从面包板上的accellerometer读取读数并填充浮子arrays(使用毕达哥拉斯将3轴合并为一个信号)。 输入XYZ值按比例缩小,平均值介于-2400和2400之间。 […]

程序在MPlab的Pic C意外地返回其主要点

我正在使用MPLAB IDE中的PIC16F84编程步进电机。 在我调用它的延迟方法后,我的程序返回它的起点。 为了更具特色,这里有一些代码片段。 驱动程序的主要方法 int main(int argc, char** argv) { TRISB = 0; // PORT B as output port PORTB = 0x0F; stepForward(25); activateRelay(); waitForSeconds(3000); deActivateRelay(); stepBackward(50); //Since step forward method steps for 100, this will return to initial state stepForward(25); return (EXIT_SUCCESS); } 前进的方法 void stepForward(unsigned int stepCount){ while(0 < stepCount) { PORTB […]

MpLab链接错误:无法分配部分(C30编译器)

我已将这两段代码放在一起(最初在此问题中描述)。 我现在刚从MpLab(Microchip MPLAB C30)遇到此错误 Link Error: Could not allocate section .nbss, size = 20004 bytes, attributes = bss near 最奇怪的是,我在编译器手册(Microchip出版物DS51284F)中找到了该消息,甚至是该消息的子字符串,但没有发现任何消息。 我甚至寻找单词allocate ,发现它只有三到四次,从来没有出现过错误信息。 在将这两段代码放在一起之前,我有一个定义为0x8000的段,我用于内存的“大块”,我们将使用它来将数据从Thing-X移动到Thing-Y 我把我在0x8000定义的数据区缩小到1个单独的字节,我仍然收到这个错误。 我没有在Microchip的编译器手册DS51284F中看到此消息。 有没有人曾经解决过这个问题? 链接器有不同的手册吗? 有没有办法让我可以得到一张记忆图来查看我的记忆区域在哪里?

为什么这个PIC代码不会点亮我的LED?

以下代码不会将我的PIC18F14K50上的任何引脚设置为高电平,但它不会更简单! #include #include void main(void) { // Set ALL pins to output: TRISA = 0; TRISB = 0; TRISC = 0; // Set ALL pins to high: LATA = 0b11111111; LATB = 0b11111111; LATC = 0b11111111; // Leave pins high and wait forever: while (1); } 我正在使用MPLAB v8.43和Hi-Tech ANSI C编译器。 除VUSB和MCLR外,逻辑探头不会显示高电平引脚。 有任何想法吗?

使用XC8接收有关plib I2Cfunction的“未定义符号”错误

嘿那里StackOverflow! 我的问题涉及在下面粘贴的程序中报告的错误。 目标器件是PIC12LF1552 ,它上面有一个串行外设,我假设它可以与Microchip的XC8编译器提供的库一起使用。 互联网上的一些消息人士表示,只有PIC18系列中的高端设备才支持库函数,其他消息来源表示库函数运行良好。 所以我决定不想从头开始重写I2C函数,也不想为这个项目编写任何数量的程序集。 因此,我决定使用随附的XC8外设库。 我阅读了编译器文档,了解如何获取它们(如下面的i2c.h所示)。 我知道根据文档和我见过的一些例子对这些命令进行了一些错误检查,但暂时我假设主人和奴隶都表现得很完美,所以我可以把这件事搞得一团糟地面。 我已经包含了所有相关路径,这就是为什么我认为它在编译过程中得到了这么多。 我在C语言和编译器的内部工作方面的知识水平非常有限,我只知道如何在基本级别使用这些工具,所以我可能会缺少一些基本的东西。 无论如何,当我在MPLABX v1.95中编译这段代码时,我得到了这个: :0: error: undefined symbols: _AckI2C(dist/pickit3/production\strobe.X.production.obj) _ReadI2C(dist/pickit3/production\strobe.X.production.obj) _IdleI2C(dist/pickit3/production\strobe.X.production.obj) _OpenI2C(dist/pickit3/production\strobe.X.production.obj) _StopI2C(dist/pickit3/production\strobe.X.production.obj) _NotAckI2C(dist/pickit3/production\strobe.X.production.obj) _WriteI2C(dist/pickit3/production\strobe.X.production.obj) _StartI2C(dist/pickit3/production\strobe.X.production.obj) 我无法在Google,StackOverflow或其他方面找到与我的特定上下文有关的任何相关信息(另一个人在从Microchip的传统C18编译器移植时有一个非常类似的问题,但我已经做了所有人为解决他的问题所做的一切) 。 所以我想,问题是,为什么我得到这个编译器错误,它在C语言或Microchip的实现背后的机制是什么导致了这个? /* * File: i2c.h * Author: James * * Created on July 23, 2014, 9:02 PM */ #ifndef I2C_H #define I2C_H #ifdef __cplusplus extern “C” { #endif […]

将输出端口设置为高电平C

我正在使用MPLAB使用CCS编译器在C中编译程序。 我想使用定义的端口将输出端口设置为高或低。 #bit portOut1 = PORTC.0 所以,我想将portOut1设置portOut1高或低。 我用过3种方法来做,但只有一种方法有效。 但我对此并不满意。 1 :(不起作用,为什么?) portOut1 = output5.value; 2 :(不起作用,为什么?) output_bit(portOut1,value); 3 :(显然工作) output_bit(pin_c0, value); 我不明白为什么第一种和第二种方式不起作用。 而且我不想使用第三种,因为除非我发表评论,否则我不知道这个引脚是做什么的,我认为这不是一个好的程序实践。 有人知道这样做的方法吗? 或者我做错了什么?

无限循环中的return语句

如果返回语句位于此无限while(1)循环内,则返回语句返回何处? 更重要的是,我不知道while(1)循环可能被打破??? void __attribute__((interrupt, no_auto_psv)) _T3Interrupt(void) { int count; IFS0bits.T3IF = 0; // clear Tmr3 interrupt flag StopMotor(); IEC0bits.ADIE = 0; // disable ADC interrupt IEC0bits.CNIE = 0; // disable CN interrupt IEC0bits.T3IE = 0; // disable Tmr3 interrupt T3CONbits.TON = 1; // restart tmr3 count = 0; while (1) { if (IFS0bits.T3IF) { IFS0bits.T3IF […]