请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 工具/软件:TI C/C++编译器
大家好、
我有一个程序从主存储器中读取数据、并将其加载到参数中。
之后 、我设置一些配置并将其存储回主存储器、但它会卡在以下行中:
for (i = 0;i < baud _menu_LEN;i++) WriteToFlash (((char*) MEM_L_BDRT - I、(char) L_baudRate[i]);//合法波特率
我对这些行进行注释并重试、从 主存储器加载数据并将其写回、然后再次读取、现在从 loadparameters 函数开始重新存根。
这是加载和保存参数代码:
#define MEM_CNTBY 0xFC00// Count
#define MEM_NOD 0xFBFF// NOD
#define MEM_DP 0xFBFI/// Decimal place
#define MEM_BDRT 0xFBFD// BAUD RATE
#define MEM_ZERO _H 0xFBF7//头16位#define MMXFBEM_zero_L/ define
MAX/ RMW 16位#define RMXFBF10/ define
MR#define 16位#define MAX_MAX_MAX/ RMW 16位#define RMW 16位#define RMWFBF10F10/ define MR#define 16位#define MR#define MR#define 16位#define MFBF10F10F10/ Slope first 16 bits
#define MEM_SLOW_L 0xFBF1// slope last 16 bits
#define MEM_AZT 0xFBEF//自动零跟踪
#define MEM_P2Z 0xFBEE//推至零
#define MEM_UNIT 0xFBED// UNIT
#define MEM_MFBEM_PEC//自动零跟踪
#define MFBEM_PASS/
密码#define MFBEM_EN/0xFBEM_PASS/#define MU_EN/#define MUEN/0xFBEM_PASS_EN/#define EE_EN/#define EE_EN/EN/EN/#define EE_PASS_EN/#define MPEN/EN/EN/EN_EE_EE_EN/EN/#define EE_EE_EN/EN/EN_PASS_EE_EN/ c_in_MOTION
#define MEM_PETY_H 0xFBDB// tare first 16 bits
#define MEM_PETY_L 0xFBD9// tare last 16 bits
#define MEM_PWR_ON_H 0xFBD7
#define MEM_PWR_ON_L 0xFBD5
#define MEM_STD 0xFBD4 #define
MEM_L_L tchar 0xFBM1
;
signed MBC1_L 参数0xFBDC1 tar = 0xFBDC1
= t1 tchar tar;tar long tar = 0xFBDC1 t1 t1 tar tar = tar tar tar tar tar
ReadFromFlash ((char*) MEM_CNTBY、(char*)&cnt_by_idx);// Count_By
if (cn_by_idx < 0 || cnt_By_idx > count_BY_ARR_LEN - 1)
cn_by_idx = 3;cnt_by_idx
(n_decime_petr_idx
)*(n_idx
)+ trom_char (n_d_idx
+ 1)+ 1)+ trom_char (n_d_char + 1)
ReadFromFlash((char*)MEM_BDRT,(char*)&BAUD_RATE_IDx);// BAUD_RATE
IF (BAUD_RATE_IDx < 0 || BAUD_RATE_IDx> BAUD_MENU_LEN-1)
BAUD_RATE_IDx=5;ShortFRATE*
(short*)RM1*(short_1 (&M1)*(&)
;* Short_RUM_RUM_LM*(*)*(&MHRFRATE_LM*)*(*)*(&RUM_LM*(*)*(&RUM_SH)*)*(*)*(*)*(*)*(&RUM_SH_LM*)*(*)*(*)*(&RUM_SH_LM*)*(*)*)*(*)*(*)*(&MHRFRATE_SH_SH_SH_SH_RUM_RUM_SH_SH_LM_RUM_RUM_SH_LM_LM_LM_LM_SH
ReadFromFlash(((Short*)MEM_SLOW_H,(Short*)&M1);// Slope
ReadShortFromFlash(((Short*)MEM_SLOP_L,(SHort*)&m2;// Slope
A =( long )m2 <16 |(long)AZ & 0xFFFF;
wt_SLOT_LEx*(percent *)&n_tracking_trackn_y*(1)Z_y*
(&n_y&n)+(1&n)&n_trackn_char;&trackn_y*(1&n_y&n_ch_ch_ch_y&)
;
ReadFromFlash (((char*) MEM_UNIT、(char*)&unit_idx);// Unit_Selection
if (unit_idx < 0 || unit_idx > unit_menu_LEN - 1)
unit_idx = 0;
ReadFromFlash ((char*) MEM_TRAN、(char*)&tal_MEMORY
= 0
;tid_m_pass = 0)
;tome_tun_m_m_un_r_m_m_en_en_en_en_en_en_en_en_en_en_en_en_en_m= 0;t/ch_en_en_en_memory_en_en_en_en_en_en_en_e+ tory_en_en_en_en_en_en_ch_en_en_en_en_e+(ch_en_en_en_ch_en_en_en_en_en_en_en_en_e+= 0)+ tory_en_en_en_en_en_en_en_en_ i++)
ReadFromFlash (((char*) MEM_admin_pass - i、(char*)&M_pass_to_Setup[i]);// ManagerPassword
}
否则
{
SetPassword ("678"、3、ManagerSetup];
}
ReadFromFlash ((Readchar*) MEM_USER_PASS_LEN、("678*
)+
、UserPass_+、[0_UserPass_+、[0_UserPass_max];}ReadFromchar (_max_UserPass_+)+、UserPass_+、[0+、UserPass_+)+、UserPass_+(设置+)
ReadFromFlash((char*)MEM_in_MOTION,(char*)&c_in_MOTION );// c_in_MOTION
if (c_in_MOTION < 25 || c_in_MOTION > 100)
c_in_MOTION = 30;
if (Tara_memory_idx=0){TM_ShortFlash*
(&)*(short)
;TM1*(short_short);t&t&t*(&t&t)RM1*(short)
ReadFromFlash (((char*) MEM_STD、(char*)&standard_idx);// Unit_Selection
if (standard_idx < 0 || standard_idx > SMODE_menu_LEN - 1)
standard_idx = 0;
for (i = 0;I < P2Z_menu_LEN;i++= P2Z_I
= 0);I = 2CC1[I = PPZ_I = 0;I = 1 += 1 += PPZ_I = 1;I = 1 += 1 += 1 += PPZ_+= 1;I += 1 += 1 += 1 +++++++++++++= 1 +++++++++++= 1 +++++++++++++= 1 +++++++++++++ i++)
{
ReadFromFlash (((char*) MEM_L_BDRT - I、(char*)&C1);//合法波特
率 if (c1 < 0 || c1)
L_baudRate[i]= i%2;
否则
L_baudRate[i]= c1;
}
/ tempslope MaxWeight =(max_wt_rumt);
void PowerOn =(wt_pwron - wt_zero)/wt_slope;*//* ReadFromFlash ();// M_nod_selection 所有自选择0或1 ReadFromFlash ();// M_Baud_rate 所有读取0或1 ClearFromFlash ();// M_selFlash ();
// M_self (0xFF_0*()选择)*(// 0xFF_char);//选择0xFF_0*0*0*(*(//
WriteToFlash ((char*) MEM_CNTBY、(char) cnt_By_idx);// Count_by
ShorteToFlash ((char*) MEM_NOD、(char) n_o_d_d_d_d_d_idx);// Count_by
WriteToFlash ((char *)(ch_DP、(chor_short_t&t&t&tch_t&t&tch_t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&
WriteZT ToFlash ((SHORT*) MEM_SLOW_H、(SHORT)(A & 0xFFFF);// Slope
WriteZT ToFlash ((SHORT*) MEM_SLOW_L、(SHORT)(((A >> 16)& 0xFFFF);//
WriteManagerToFlash ((char *) MEM_APercent、WriteZ_LE+)
;WriteMB_LETS*(EE_LE+);WriteMB_LETS*(char +)+(char +);
// WriteMB_LETS_LETS_LETS_LETS*(char +);Write+(char +(char +)+);WriteMemory_Tochar (char +(char +)+(char +)+(char +);// WriteM0_Tochar +(char +(char +)+(char +)+(char +)+(char +(char +)+)+(char +)+(char +);//(char
i++)
WriteToFlash (((char*) MEM_USER_PASS - I、(char) pass_to_Setup[i]);//用户密码
WriteToFlash ((char*) MEM_IN_MOTION、(
trare) c_in_MOTION);// c_in_MOTION WriteToFlash (((((SHort*)
)&tshort_t&t&t&t&tchar
);// short_short_t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&t&
i++)
WriteToFlash ((((char*) MEM_L_BDRT - I、(char) L_budrate[i]);//合法波特
率/* WriteToFlash ();// M_nod_selection 所有自选择0或1
WriteToFlash ();// M_Baud_rate 所有
自选择0*或1*0*
这是 FlashHandling 代码:
#include "FlashProcess.h"
void InitFlash()
{
FCTL2 = FWKEY + FSSEL0 + FN1;
}
void WriteLongToFlash (long*地址、long val)
{
long* flash_ptr;
FCTL3 = FWKEY;
flash_ptr = address; //初始化闪存指针
while (FCTL3 & BUSY);
FCTL1 = FWKEY + WRT;
* FLASH_PTR = val;
while (FCTL3 & BUSY);
FCTL1 = FWKEY; //清除 WRT 位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
void ReadLongFromFlash (long*地址、long* val)
{
long* flash_ptr;
flash_ptr =地址;
while (FCTL3 & Busy);
* val =* flash_ptr;
}
void WriteShortToFlash (short*地址、short val)
{
short* flash_ptr;
FCTL3 = FWKEY;
flash_ptr =地址;flash_address;flash_address; //初始化闪存指针
while (FCTL3 & BUSY);
FCTL1 = FWKEY + WRT;
* FLASH_PTR = val;
while (FCTL3 & BUSY);
FCTL1 = FWKEY; //清除 WRT 位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
void ReadShortFromFlash (short*地址、short* val)
{
short* flash_ptr;
flash_ptr =地址;
while (FCTL3 & Busy);
* val =* flash_ptr;
}
void WriteToFlash (char*地址、char val)
{
char* flash_ptr;
FCTL3 = FWKEY;
flash_ptr =地址;flash_address; //初始化闪存指针
while (FCTL3 & BUSY);
FCTL1 = FWKEY + WRT;
* FLASH_PTR = val;
while (FCTL3 & BUSY);
FCTL1 = FWKEY; //清除 WRT 位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
void ReadFromFlash (char*地址、char* val)
{
char* flash_ptr;
flash_ptr =地址;
while (FCTL3 & busy);
* val =* flash_ptr;
}
void ClearFlash (char*地址)
{
char * flash_ptr; //段 D 指针
flash_ptr =地址; //初始化闪存段 D 指针
FCTL1 = FWKEY + ERASE; //设置整体擦除位
FCTL3 = FWKEY; //清除锁定位
* flash_ptr = 0; //虚拟写入擦除闪存段 D
FCTL3 = FWKEY + LOCK;
}
void ClearAllFlash()
{
char *flash_ptr; //段 D 指针
flash_ptr =(char *) 0x1000; //初始化闪存段 D 指针
FCTL1 = FWKEY + MERAS; //设置整体擦除位
FCTL3 = FWKEY; //清除锁定位
* flash_ptr = 0; //虚拟写入擦除闪存段 D
FCTL1 = FWKEY + WRT; //为写操作设置 WRT 位
FCTL1 = FWKEY; //清除 WRT 位
FCTL3 = FWKEY + LOCK;
}