标签: microchip

从C重置Pic18

使用C代码重置Pic18的最佳方法是使用HiTech Pic18 C编译器

编辑:

我当前正在使用

void reset()
{
#asm 
  reset
#endasm
}
Run Code Online (Sandbox Code Playgroud)

但必须有一个更好的方法

embedded microchip pic

3
推荐指数
3
解决办法
8035
查看次数

如何在MPLAB中增加内存块的大小?

Microchip PIC MPLAB(MCC18)编译器将其存储器分为256个块(0x100).

如何创建大于256字节的数组?

char buffer[256];
Run Code Online (Sandbox Code Playgroud)

为了达到256,我需要制作一个单独的片段 #pragma

#pragma udata segment_name
char buffer[256];
#pragma udata
Run Code Online (Sandbox Code Playgroud)

所以我可以强制MCC18让我们分配更大的缓冲区?或组合两个内存段?

memory embedded microchip pic

3
推荐指数
1
解决办法
6195
查看次数

pic32 引导加载程序写入内存

我在使 PIC32MX795F512L 的引导加载程序正常工作时遇到问题。

我基于 microchip 网站上的示例代码。

这是我应该写入内存的代码部分,到目前为止我已经验证了引导加载程序(解析十六进制文件很好,数据到达这一点但没有写入内存):

#define NVMOP_WORD_PGM          0x4001 


// Write the data into flash.   
Result = NVMemWriteWord(ProgAddress, WrData);   
// Assert on error. This must be caught during debug phase.
if(Result != 0)
{       
    ASSERT(Result==0);
}

UINT NVMemWriteWord(void* address, UINT data)
{
    UINT res;

    NVMADDR = KVA_TO_PA((unsigned int)address);

    // Load data into NVMDATA register
    NVMDATA = data;

    // Unlock and Write Word
    res = NVMemOperation(NVMOP_WORD_PGM);

    return res;
}

UINT __attribute__((nomips16)) NVMemOperation(UINT nvmop)
{
    int int_status;
    int susp;

    // Disable …
Run Code Online (Sandbox Code Playgroud)

c microchip bootloader mplab pic32

3
推荐指数
1
解决办法
4761
查看次数

为什么索引1处的数组在我的编译器中重置?(未定义的行为)

我不明白为什么我的编译器(Microchip XC16)会向其他编译器提供不同的结果.

下面是我转换为在通用机器上运行的示例代码,而不仅仅是我正在使用的pic33fj256gp710.当在pic上运行代码时(代码示例2),我得到一个不同的结果,其中第一个数组索引被重置为0(结果2).

本质上,我们的想法是通过串行端口获取字符串命令,并通过拆分字符串并对其进行排序来配置设备.

这是因为编译器最初传递一个指向该值的指针,直到清除该字符串而不是传递该值本身?如果是这种情况,我如何强制编译器传递值本身?

代码示例1:

char receive_data_2[100] = "XXXX,1,4,20,33,34";

int m = 4;
char intext[10];
int output_values[10];

int number_of_logger_selections = 0;
while(receive_data_2[m] != ' ' && number_of_logger_selections < 10)
{
    int a = 0;
    m++;
    strcpy(intext, "          ");
    do
    { // get parameter number
        intext[a++] = receive_data_2[m++];
    } while(receive_data_2[m] != ',' && receive_data_2[m] != ' ');

    output_values[number_of_logger_selections] = atoi(intext); // save output number to mark 'x'

    printf
        ("\nvalue at output_values[%d] = %d, intext = %s, translated to %d\r\n\n",
         number_of_logger_selections, …
Run Code Online (Sandbox Code Playgroud)

c embedded microchip

3
推荐指数
1
解决办法
95
查看次数

Microchip PIC C18编程文件格式.COFF与.HEX

我正在MPLAB IDE中开发代码,我想知道使用编译器生成的.COFF或.HEX文件编程芯片是否更好.我不确定两者之间有什么区别,我假设他们都会做同样的工作.

compiler-construction embedded hex coff microchip

2
推荐指数
1
解决办法
3150
查看次数

node.js用于微芯片pic32

我知道lua正在开发微芯片PIC32,我想知道node.js(服务器的javascript)是否可以工作,或者如果lib对于PIC32来说太大或太慢了.

embedded microchip pic node.js

2
推荐指数
1
解决办法
1590
查看次数

Timer1 RD16位在PIC18单片机上的作用是什么?

我真的很困惑.手册说:

RD16: 16-bit Read/Write Mode Enable bit
1= Enables register Read/Write of Timer1 in one 16-bit operation
0= Enables register Read/Write of Timer1 in two 8-bit operations
Run Code Online (Sandbox Code Playgroud)

但是,实际上似乎没有任何方法可以通过一个16位操作进行R/W!从数据表后面的内容以及我在网上看到的内容来看,16位值仍必须读作:

foo = TMR1L;
bar = TMR1H;
Run Code Online (Sandbox Code Playgroud)

写作:

TMR1H = bar;
TMR1L = foo;
Run Code Online (Sandbox Code Playgroud)

除非我没有看到它,否则RD16没有显示在Timer1框图中,似乎对任何事情都没有影响!

我知道这不可能是真的,所以我在这里问:Timer1 RD16位对PIC18单片机有什么作用?

microcontroller timer microchip pic pic18

2
推荐指数
1
解决办法
1248
查看次数

我对Modbus通信有点新意,并且很难弄清楚在"免费modbus"主机端使用哪些功能

我对Modbus通信有点新意,我开始阅读有关"Free Modbus"库的内容.现在,我明白了如何使用它来实现Modbus通信的从属端,但我似乎无法找到如何在主服务器端使用该库.例如,我在主机侧调用什么功能来读取从机19的离散输入3(例如)?

提前感谢您的帮助.

顺便说一下,我正在用C语言编写MSP430微控制器.

embedded modbus microchip master-slave

2
推荐指数
1
解决办法
1030
查看次数

C中的临时变量

我正在使用Microchip的XC32编译器,它不允许在循环内声明变量(不支持C99),所以我不能这样做:

for(int i = 0;i<10;i++)
    {do w/e}
Run Code Online (Sandbox Code Playgroud)

我不想让它成为一个全局的,因为很难跟踪它在大项目中的价值,在各种循环中使用相同的东西,即使你i = 0在每个循环中初始化它.我甚至对此有一个错误,如果你有一些使用相同的嵌套循环,结果会发生奇怪的事情i.

据我所知,我不能手动"取消声明"它,但是在通过块后,在一段代码中定义的变量是未声明的?这是真的,这是否意味着这个代码将像上面的代码一样:

{
     int i;
     for(i = 0;i<10;i++)
        {do w/e}
}//no i anymore?
Run Code Online (Sandbox Code Playgroud)

c embedded microchip

2
推荐指数
1
解决办法
249
查看次数

如何擦除闪存的某些字节?

我的PIC18F87J11一次只能擦除1024个字节.有没有强迫它一次只擦除2个字节或更多?

我正在制作一个Bootloader,有时候只有一行HEX文件(16字节)更改为应用程序,所以我想用新的16字节替换内存中的那一行.如果我尝试擦除这16个字节,则自动擦除1024个字节.然后我被迫重写它们,这需要一些时间并降低Bootloader的速度.

是否有另一种方法可以在不擦除1024个字节的情况下从闪存中擦除某些内容?希望有.

谢谢!

embedded microcontroller microchip pic bootloader

2
推荐指数
1
解决办法
940
查看次数