- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 C 和 PIC 编程新手。我被要求修复现有代码,因为它无法有效工作。我进行了更改并提出了自己的算法,但是,由于我只有一些面向对象的经验,我认为我错过了一些基本的东西。这是我的代码:
BOOL FLASH_Init_Write(){LCD_WriteLine("INIT_WRITE!",1,TRUE);
char temp_pass[4];
BOOL returned;
BYTE j;
LCD_WriteLine("In the function",1,TRUE);
FLASH_ErasePage();
LCD_WriteLine("after erase",1,TRUE);
char *value="\0";
char *value1="1";
char *value99="99";
char *config[1356];
memset(config,0,1356);
char ATN[2448];
memset(ATN,0,2448);
char BUZ[408];
memset(BUZ,0,408);
char REL[408];
memset(REL,0,408);
char DTC[408];
memset(DTC,0,408);
char DTS[8160];
memset(DTS,0,8160);
char FNR1[2448];
memset(FNR1,0,2448);
char FNR2[2448];
memset(FNR2,0,2448);
char FNR3[2448];
memset(FNR3,0,2448);
char FNR4[2448];
memset(FNR4,0,2448);
char FNR5[2448];
memset(FNR5,0,2448);
char FNR6[2448];
memset(FNR6,0,2448);
char FNR7[2448];
memset(FNR7,0,2448);
char FNR8[2448];
memset(FNR8,0,2448);
char FNR9[2448];
memset(FNR9,0,2448);
char FNR10[2448];
memset(FNR10,0,2448);
char FTXT1[10200];
memset(FTXT1,0,10200);
char FTXT2[10200];
memset(FTXT2,0,10200);
char FTXT3[10200];
memset(FTXT3,0,10200);
char FTXT4[10200];
memset(FTXT4,0,10200);
char FTXT5[10200];
memset(FTXT5,0,10200);
char FTXT6[10200];
memset(FTXT6,0,10200);
char FTXT7[10200];
memset(FTXT7,0,10200);
char FTXT8[10200];
memset(FTXT8,0,10200);
char FTXT9[10200];
memset(FTXT9,0,10200);
char FTXT10[10200];
memset(FTXT10,0,10200);
strncpy(temp_pass,FLASH_Read_Password(),4);
ClearWDT();
if(_ONOFF)
{
if(!FLASH_SetOnOff(0)) return FALSE;
}
else
{
if(!FLASH_SetOnOff(1) ) return FALSE;
}
if (POWERCONNECTION)
{
flag_PowerOn = FALSE;
}
else
{
flag_PowerOn = TRUE;
}
if(!FLASH_WriteLowBatteryFlag(0))
{
ERROR_Handling(ERROR_FLASH_WRITING_LOW_BATT);
return FALSE;
}
//ATN values for all 102 profiles set to factory settings
memcpy(&ATN[24],value1,1);
memcpy(&ATN[25],value,1);
for(j=2;j<100;j++)
{
memcpy(&ATN[24*j],value,1);
}
memcpy(&ATN[2400],value1,1);
memcpy(&ATN[2401],value,1);
memcpy(&ATN[2424],value1,1);
memcpy(&ATN[2425],value,1);
//BUZZER values for all 102 profiles set to factory settings
for(j=1;j<100;j++)
{
memcpy(&BUZ[4*j],value99,1);
}
//RELAY values for all 102 profiles set to factory settings
for(j=1;j<100;j++)
{
memcpy(&REL[4*j],value99,1);
}
//Display Text Configuration values for all 102 profiles set to factory settings
memcpy(&DTC[4],value1,1);
memcpy(&DTC[5],value,1);
memcpy(&DTC[400],value1,1);
memcpy(&DTC[401],value,1);
memcpy(&DTC[404],value1,1);
memcpy(&DTC[405],value,1);
//Display Text String values for all 102 profiles set to factory settings
for(j=0;j<102;j++)
{
memcpy(&DTS[j*80],value,1);
}
//Forward Number values for all 102 profiles set to factory settings
for(j=0;j<102;j++)
{
memcpy(&FNR1[j*24],value,1);
memcpy(&FTXT1[j*100],value,1);
memcpy(&FNR2[j*24],value,1);
memcpy(&FTXT2[j*100],value,1);
memcpy(&FNR3[j*24],value,1);
memcpy(&FTXT3[j*100],value,1);
memcpy(&FNR4[j*24],value,1);
memcpy(&FTXT4[j*100],value,1);
memcpy(&FNR5[j*24],value,1);
memcpy(&FTXT5[j*100],value,1);
memcpy(&FNR6[j*24],value,1);
memcpy(&FTXT6[j*100],value,1);
memcpy(&FNR7[j*24],value,1);
memcpy(&FTXT7[j*100],value,1);
memcpy(&FNR8[j*24],value,1);
memcpy(&FTXT8[j*100],value,1);
memcpy(&FNR9[j*24],value,1);
memcpy(&FTXT9[j*100],value,1);
memcpy(&FNR10[j*24],value,1);
memcpy(&FTXT10[j*100],value,1);
}
//Forward Text values for all 102 profiles set to factory settings
//now put together all the configs
for(j=0;j<102;j++)
{
memmove(config,&ATN[24*j],24);
memmove(&config[24],&BUZ[4*j],4);
memmove(&config[28],&REL[4*j],4);
memmove(&config[32],&DTC[4*j],4);
memmove(&config[36],&DTS[80*j],80);
memmove(&config[116],&FNR1[24*j],24);
memmove(&config[140],&FTXT1[100*j],100);
memmove(&config[240],&FNR2[24*j],24);
memmove(&config[264],&FTXT2[100*j],100);
memmove(&config[364],&FNR3[24*j],24);
memmove(&config[388],&FTXT3[100*j],100);
memmove(&config[488],&FNR4[24*j],24);
memmove(&config[512],&FTXT4[100*j],100);
memmove(&config[612],&FNR5[24*j],24);
memmove(&config[636],&FTXT5[100*j],100);
memmove(&config[736],&FNR6[24*j],24);
memmove(&config[760],&FTXT6[100*j],100);
memmove(&config[860],&FNR7[24*j],24);
memmove(&config[884],&FTXT7[100*j],100);
memmove(&config[984],&FNR8[24*j],24);
memmove(&config[1008],&FTXT8[100*j],100);
memmove(&config[1108],&FNR9[24*j],24);
memmove(&config[1132],&FTXT9[100*j],100);
memmove(&config[1232],&FNR10[24*j],24);
memmove(&config[1256],&FTXT10[100*j],100);
//write configs in flash, one profile at a time
if(!FLASH_Write_Default_Config(j,(char*)config)) return FALSE; }
if(flag_externalmode || flag_initwrite)
{
if(!FLASH_Write_MasterNr("\0"))
{
ERROR_Handling(ERROR_FLASH_WRITING_MASTERNUMBER);
return FALSE;
}
}
if(!FLASH_Write_OOT(1))
{
ERROR_Handling(ERROR_FLASH_WRITING_OOT);
return FALSE;
}
if(!FLASH_Write_Password(temp_pass))return FALSE; return TRUE;}
BOOL FLASH_Write_Default_Config(BYTE ind, char* value)
{
BOOL result;
char temp[1356]={0};
strcpy(temp,value);
result = FLASH_WriteToMemory(RECORD_ADDRESS_00 - 1356*ind, temp, 1356);
if(result == FALSE)
{
ERROR_Handling(ERROR_FLASH_WRITING_RECORD);
flag_FlashWrtRecordErr=TRUE;
return FALSE;
}
else
return TRUE;
}
所以这段代码填充了一些数组,然后将它们一起放入config[]中,然后将其写入闪存中。以下是 .h 文件的一部分:
#define RECORD_ADDRESS_00 0xBD07FAB4 // 1356 bytes - unknown number configuration
//Acc Tel Nr. 01 (24 bytes),Buzzer 01 (4 bytes),Relay 01 (4 bytes),Display Text Cfg 01 (4 bytes),Display Text 01 (80 bytes),
//Forward Nr 01 01 (24 bytes),Forward Text 01 01 (100 bytes),Forward Nr 01 02 (24 bytes),Forward Text 01 02 (100 bytes),//Forward Nr 01 03 (24 bytes),Forward Text 01 03 (100 bytes),Forward Nr 01 04 (24 bytes),Forward Text 01 04 (100 bytes),//Forward Nr 01 05 (24 bytes),Forward Text 01 05 (100 bytes),Forward Nr 01 06 (24 bytes),Forward Text 01 06 (100 bytes),//Forward Nr 01 07 (24 bytes),Forward Text 01 07 (100 bytes),Forward Nr 01 08 (24 bytes),Forward Text 01 08 (100 bytes),//Forward Nr 01 09 (24 bytes),Forward Text 01 09 (100 bytes),Forward Nr 01 10 (24 bytes),Forward Text 01 10 (100 bytes);
//1356 bytes = 0x0000054C
#define RECORD_ADDRESS_01 0xBD07F568 // 1356 bytes - pushbutton alarm configuration
#define RECORD_ADDRESS_02 0xBD07F01C // 1356 bytes - access number 2 configuration
#define RECORD_ADDRESS_03 0xBD07EAD0 // 1356 bytes - access number 3 configuration
#define RECORD_ADDRESS_04 0xBD07E584 // 1356 bytes - access number 4 configuration
#define RECORD_ADDRESS_05 0xBD07E038 // 1356 bytes - access number 5 configuration
#define RECORD_ADDRESS_06 0xBD07DAEC // 1356 bytes - access number 6 configuration
#define RECORD_ADDRESS_07 0xBD07D5A0 // 1356 bytes - access number 7 configuratione
我最关心的问题之一是这里的页面大小。它被定义为 4096 (PIC32MX460F512L)。我不确定是否应该一次写入 4096 字节长的数据。请尝试在这里帮助我,我已经为此苦苦挣扎了很长一段时间,但我找不到我犯的那个愚蠢的错误。
提前致谢
最佳答案
除非指针的大小为 1,否则对象不会完全归零
char *config[1356];
memset(config, 0, 1356);
// It should be
memset(config, 0, 1356 * sizeof(char*));
// or better yet
memset(config, 0, sizeof(config));
但正如 @unwind 所建议的,config
是错误的类型,您应该使用
char config[1356]; // no *
memset(config, 0, sizeof(config));
这也适用于许多其他对象。
<小时/>如何将内存写入闪存取决于编译器,但未指定。如果有疑问,请创建一个页面大小缓冲区 (4096),将闪存读入其中,将更新复制到缓冲区中,然后写入页面。
考虑为所有这些字段创建一个打包的struct
,而不是memmove(&config[24],&BUZ[4*j],4);
等。
关于c - pic32写入flash c编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754513/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
让我们快速回顾一下以下案例: 不将动态链接与位置无关代码相结合。我可能敢说这是一个不可能的案例,但当我深入探讨这个主题时,我不太确定。 将静态链接与位置无关代码相结合。我相信这作为一个有效的组合是完全
我正在将一个线程局部变量添加到几个始终直接链接到可执行文件的目标文件中。这些对象永远不会包含在共享库中(并且可以安全地假设这在可预见的 future 会成立)。这意味着这些对象不需要 -fPIcfla
这个问题与this one有关以及它的答案。 我刚刚在我正在处理的构建中发现了一些丑陋之处。情况看起来有点像下面(用gmake格式写的);请注意,这特别适用于 sparc 和 x86 硬件上的 32
我在 PIC 的 mikroC 中实现基于定时器的中断时遇到问题。 如果 PORTC.F0 处有按键,我想切换端口引脚 8 次,并且切换之间应该有 100 毫秒的延迟。 通常使用延迟函数这会很容易 f
我试图通过 SPI 通信让 PIC1 成为主机,PIC2 成为从机。我想从 PIC1(master)发送命令到 PIC2(slave),然后让它做一些事情。但是,我也想通过 SPI 通信建立从 PIC
我正在使用 cvSplit() 来分离 RGB channel 并将它们打印在 3 个不同的图像中,显示颜色 r、g 和 b。但我只有黑白照片的 BW 图像。这是使用 cvSplit() 时的正确输出
初始化以下变量时: 01 BATCH-REC. 03 BATCH-VERSION PIC X(2). 03 BATCH-FIELDS
当我在学习 javafx 教程并尝试为 ImageView 创建一个新的 Image 实例以将其用于 TreeView 时,我注意到导师曾经创建一个 ImageView:new ImageView(n
我正在研究 PIC16F887,我的任务主要基于 adc 读数(8 位)。有 10 个不同的模拟输入,因此逐个读取它们需要相当长的时间。时钟为 20Mhz,adc 唯一允许的设备频率为 Fosc/32
我有一 block 带有特殊 UEXT connector 的 Olimex A20 板它可以连接 SPI、I2C 和 RS 232。我喜欢使用 Olimex 的 MOD Zigbee 模块直接通过
有没有办法在不使用pickit型编程器的情况下编程(闪存)裸(尚未使用引导加载程序闪存)pic32芯片? 例如,是否有任何正在进行的 JTAG 项目? 最佳答案 建议您引用Microchip PIC3
阅读时this blogpost , 当作者试图证明共享库需要 PIC 时,我遇到了以下情况。 If your shared library is built to only work when lo
我是 PIC mcu 的新手。我使用 pic12f675 MPLAB 和 XC8 来制作 LED 多次闪烁模式。 我有按钮问题(经过审查,它调用了 Bounce 和 Debounce)。 有时当我按下
是否有用于不可屏蔽中断的独立通信总线绕过可编程中断 Controller ? 或者 PIC 是否管理所有中断,但按照约定传递所有不可屏蔽中断? 这是否取决于架构,或者是否有特定的理由选择其中一种而不是
我想问一下如何在PIC C编译器中为PIC18f4620编写代码,以便在模拟输入之一为1时传输日期 最佳答案 对于这个网站来说,这个问题实在是太宽泛了。如何编写代码取决于您使用的 PIC C 编译
我是 PIC 编程新手,正在使用 MPLAb。我有一个关于中断的问题..所以我想做的是,当我按下按钮时,我想打开 LED 0,如果我松开按钮,则打开 LED 1。我认为我编写的代码有意义,但它不起作用
我想用我的PIC18F4550、蓝牙模块HC-06和电脑做一个简单的测试。我的意思是,我想使用蓝牙模块将一个简单的字符从 PIC 发送到 PC。 它应该在终端中出现一个“A”,但出现的是十六进制的 F
所以我使用的微型芯片是 PIC 18F。 如果设置了Alarm_Status.bits.b3(本质上只是一个开关),则会创建警报。第一个代码片段按其应有的方式工作 BS(TRISB,7);
经过大量的试错和堆砌,我(我们)设法让两张图片以一种非常特殊的方式重叠: 这是这样实现的: .container { width: 900px; margin: auto; } .center
我是一名优秀的程序员,十分优秀!