我最近开始使用MPLAB,但对于使用Eclipse和VS IDE的人来说,它非常有限.您知道任何免费的IDE或如何配置Ecplise或Netbeans到PIC开发吗?
谢谢大家
我有一个包含.h和.c文件的文件夹,我想在我的项目中使用头文件.
我已经使用"添加现有项目"将它们包含在我的项目的"Header Files"文件夹中,但是当我尝试"#include"时,它们编译器(mplabc18\v3.41)说"无法找到文件xyz.h"
那么,如何使用这些文件而不将它们复制到项目文件夹中呢?
问题:
是否做了if(SomeFunction() == TRUE)
而不是做if(SomeFunction())
某些类型的编码错误?我试图了解这是否可以防止某些隐藏的地雷,或者是否是某人编写代码并且不太明白如何评估表达式的结果.我明白,如果做得对,这两件事情的评价都是一样的.就像if(value == 42)
并if(42 == value)
评估相同 - 仍然,有些人更喜欢第二个版本,因为如果有人输错了==并且写入=而产生编译器错误.
背景: 我继承了一些4年或5年前由不在这里工作的人写的嵌入式软件.我正在进行一些重构以摆脱数百行函数和全局变量以及所有爵士乐,所以这个东西是可读的,我们可以继续保持它.代码是c用于pic微处理器.这可能相关也可能不相关.该代码有各种在它的尖叫奇怪的东西"不知道他们在做什么",但在这里我想了解是不是有一个很好的理由一个特定的模式(反模式?)
模式: 这里有很多if语句采用的形式
if(SomeFunction() == TRUE){
. . .
}
Run Code Online (Sandbox Code Playgroud)
其中SomeFunction()定义为
BOOLEAN SomeFunction(void){
. . .
if(value == 3)
return(FALSE);
else
return(TRUE);
}
Run Code Online (Sandbox Code Playgroud)
让我们忽略SomeFunction从if语句的主体返回TRUE或FALSE的奇怪方式,以及他们使'return'看起来像函数调用的奇怪方式.
这似乎打破了c认为'true'和'false'的正常值.就像,他们真的想确保返回的值等于任何被定义为TRUE的值.这几乎就像他们正在制作三种状态 - TRUE,FALSE和'其他'而且他们不希望在返回"其他东西"的情况下采用'if'语句.
我的直觉是,这是一种奇怪的反模式,但我想给这些家伙带来怀疑的好处.例如,我认识到if(31 == variable)
看起来有点奇怪,但它是这样编写的,所以如果你输错了==你不会意外地将31分配给变量.如果这些人写了这个保护措施来防范类似的问题,或者这只是胡说八道.
附加信息
typedef enum _BOOLEAN { FALSE = 0, TRUE } BOOLEAN;
我是Java世界的新手,但我熟悉Ruby.我正在尝试编写一个与某些第三方jar文件交互的程序.
虽然从Java调用库似乎表现得很好,但是当我在JRuby中调用它们时它们的行为不正确.这是一个问题因为我真的想使用JRuby.例如,下面的两个程序尝试完全相同的东西,但它们产生不同的输出:
我在Netbeans中开发了下面的Java程序,然后按F6(运行主项目)运行它.项目的Libraries文件夹设置为"C:\ Program Files(x86)\ Microchip\MPLABX\mplab_ide\lib \nblibraries.properties".当我运行它时,它会打印"pins:17".
package pinbug1;
import com.microchip.mplab.mdbcore.assemblies.Assembly;
import com.microchip.mplab.mdbcore.assemblies.AssemblyFactory;
import com.microchip.mplab.mdbcore.simulator.PinSet;
import com.microchip.mplab.mdbcore.simulator.Simulator;
import org.openide.util.Lookup;
public class PinBug1
{
public static void main(String[] args)
{
AssemblyFactory assemblyFactory = Lookup.getDefault().lookup(AssemblyFactory.class);
Assembly assembly = assemblyFactory.Create("PIC18F14K50");
Simulator simulator = assembly.getLookup().lookup(Simulator.class);
int num = simulator.getDataStore().getProcessor().getPinSet().getNumPins();
System.out.println("pins: " + num); // prints "pins: 17"
}
}
Run Code Online (Sandbox Code Playgroud)
我只需输入就运行下面的JRuby程序jruby bug_reproduce.rb
并打印"pins:0".我希望它像Java程序一样打印"pins:17".
["mplab_ide/mdbcore/modules/*.jar",
"mplab_ide/mplablibs/modules/*.jar",
"mplab_ide/mplablibs/modules/ext/*.jar",
"mplab_ide/platform/lib/org-openide-util*.jar",
"mplab_ide/mdbcore/modules/ext/org-openide-filesystems.jar"
].each do |pattern|
Dir.glob("C:/Program Files (x86)/Microchip/MPLABX/" + pattern).each do |x|
require x
end
end …
Run Code Online (Sandbox Code Playgroud) 我试图shared_ptr
在一个嵌入式项目中使用,该项目是用xc32 1.34(gcc 4.5.2的衍生物)构建的.该项目已禁用RTTI -fno-rtti
.
#include <memory>
Run Code Online (Sandbox Code Playgroud)
只是包含标题给我以下错误:
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In member function 'virtual void* std::tr1::_Ref_count_del<_Ty, _Dx>::_Get_deleter(const std::type_info&) const':
In file included from APP/MODULES/LIGHT_MANAGER/LightManager.cpp:13:0:
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1264:39: error: cannot use typeid with -fno-rtti
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In member function 'virtual void* std::tr1::_Ref_count_del_alloc<_Ty, _Dx, _Alloc>::_Get_deleter(const std::type_info&) const':
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1299:39: error: cannot use typeid with -fno-rtti
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In function '_Dx* std::tr1::get_deleter(const std::tr1::shared_ptr<_Ty2>&)':
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1956:44: error: cannot use typeid with -fno-rtti
Run Code Online (Sandbox Code Playgroud)
所以我想知道的是:shared_ptr
没有RTTI 通常不可能使用,或者我做错了什么?
我已经使用PC-Lint和MPLAB几年了,它确实非常有用.MPLAB即将改为基于netbeans的IDE,我没有为PC-Lint找到任何netbeans插件.
有没有人有PC-Lint与netbeans或MPLAB X IDE集成的经验?
TIA
我使用的是MPLABX v1.80,xc32 V1.21和Microchip的示例uart代码(基本示例).
我在项目属性中选择了模拟器.我在项目属性中为窗口输出启用了UART1.
我尝试使用UART1和UART2进行编译.但是我似乎无法找到输出的位置.
示例代码如下:http: //ww1.microchip.com/downloads/en/DeviceDoc/PIC32_UART_CodeExample_041613.zip
谢谢你的帮助.
我已经FreeRTOS
在一些嵌入式项目中使用了一年时间,到目前为止它工作得非常完美。FreeRTOS
目前我面临着一个与使用高速中断移植到相关的难题PIC24H
,希望大家能帮助我解决这个问题。提前致谢
我创建了一个小型演示项目以方便测试:
两个任务:
// Task 1
if (xTaskCreate(RTOSTask_1, (signed char) "[T1]", configMINIMAL_STACK_SIZE2, NULL, tskIDLE_PRIORITY + 1, &hTask1) == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY)
{
LREP("\r\nCannot create Task 1.");
Display_Error(1000);
}
// Task 2
if (xTaskCreate(RTOSTask_2, (signed char) "[T2]", configMINIMAL_STACK_SIZE2, NULL, tskIDLE_PRIORITY + 2, &hTask2) == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY)
{
LREP("\r\nCannot create Task 2.");
Display_Error(1000);
}
Run Code Online (Sandbox Code Playgroud)
任务落实:
void RTOSTask_1(void* pvParameter)
{
while(1)
{
if (xSemaphoreTake(hTask1Semaphore, portMAX_DELAY) == pdTRUE)
{
putchar1('1');
}
}
}
void RTOSTask_2(void* pvParameter)
{
while(1)
{
if (xSemaphoreTake(hTask2Semaphore, …
Run Code Online (Sandbox Code Playgroud) 将 MPLAB X 1.70 与 dsPIC33FJ128GP802 微控制器一起使用。
我有一个应用程序,它以不同的采样率(一个为 50Hz,另一个为 1000Hz)从两个传感器收集数据,两个传感器数据包的大小也不同(一个是 5 字节,另一个是 21 字节)。到目前为止,我一直使用手动 UART 传输,如下所示:
void UART_send(char *txbuf, char size) {
// Loop variable.
char i;
// Loop through the size of the buffer until all data is sent. The while
// loop inside checks for the buffer to be clear.
for (i = 0; i < size; i++) {
while (U1STAbits.UTXBF);
U1TXREG = *txbuf++;
}
}
Run Code Online (Sandbox Code Playgroud)
不同大小的数组(5 或 21 字节)被发送到这个函数,它们的大小和一个简单的 for 循环遍历每个字节并通过 UART tx 寄存器 U1TXREG 输出它。
现在,我想实现DMA来减轻传输大量数据时对系统的压力。我已将 …
我主要使用嵌入式应用程序(FPGA和微控制器),而且我对git和版本控制一般都很新.我已经开始学习它的强大功能,并希望为同事和朋友设置一些与我合作的项目.这些项目通常在集成开发环境(IDE)中开发,例如MPLAB-X,Code Composer Studio,Libero或Quartus,它们生成二进制文件,提供后台窃听和其他功能.我在一个存储库中设置项目时遇到了一些麻烦,其他人可以克隆它并开始处理它.我发现大多数推荐的.gitignore设置让你忽略主项目文件以及所有额外的二进制文件和双产品,如.tcl脚本和文本报告.通过忽略这些,我发现我正在删除协作者使用相同配置设置开发环境所需的所有信息.但是,如果我在存储库中跟踪它们,那么我的存储库会因为不重要的额外文件(通常是大文件)而陷入困境.这个问题有更好的解决方案吗?