RTOS 中// EEPROM_SectorErase(0); //擦除一个扇区的问题
void vSystemInit( void ){
unsigned char count;unsigned int i;
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x02; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x10; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x22; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
outjdq=1;
XOSCCR=0xc0;
while(!(XOSCCR&1));
CLKDIV=0x00;
CLKSEL=0x01; //外部晶振
// DebugPrintfInit();
// printf("STC32G FreeRTOS 测试程序!\r\n");
flag1=0;flag=0;resttime=0;
clr_f_ac;set_f_dc;
gate1=1;gate2=1;
ag1=1;ag2=1;
count=30;
do{
i =4000;
while(--i);
}while(--count);
jdqdelay=125;
// EEPROM_SectorErase(0); //擦除一个扇区
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
eerom=jdqdelay&0xff;
eerom=(jdqdelay>>8)&0xff;
EEPROM_write_n(0x000000,eerom,2);
EEPROM_read_n(0x000000,eerom,2); //读出2字节
jdqdelay=eerom;
jdqdelay=(jdqdelay<<8)&0xff00|eerom;
// jdqdelay=17;
} 这擦除扇区一开程序就崩溃 那位高手能指点下, 扇区擦除就不能开启,
在RTOS(实时操作系统)环境中,vSystemInit函数通常用于初始化系统硬件资源,确保系统在启动时能够正确配置并进入稳定状态。从您提供的代码片段来看,vSystemInit函数主要完成了以下几个任务:
1. CPU指令延时设置:通过WTST = 0;将CPU执行指令的速度设置为最快。这通常是为了提高系统的响应速度,尤其是在实时性要求较高的应用中。
2. 扩展寄存器访问使能:通过EAXFR = 1;使能扩展寄存器的访问。扩展寄存器通常用于存储一些特殊的配置或状态信息,使能后可以对其进行读写操作。
3. XRAM访问速度优化:通过CKCON = 0;提高访问XRAM的速度。XRAM是外部RAM,优化其访问速度可以提升系统的整体性能。
4. GPIO端口配置:通过设置P0M1、P0M0等寄存器,将GPIO端口配置为准双向口。准双向口是一种常见的GPIO模式,适用于大多数输入输出场景。
5. 外部晶振配置:通过XOSCCR=0xc0;和CLKSEL=0x01;配置外部晶振作为系统时钟源。外部晶振通常比内部振荡器更稳定,适用于对时钟精度要求较高的应用。
6. 调试信息输出:注释掉的DebugPrintfInit();和printf("STC32G FreeRTOS 测试程序!\r\n");表明该函数可能还用于初始化调试信息输出功能,但在当前代码中被禁用。
关于您提到的EEPROMSectorErase(0);问题,该函数通常用于擦除EEPROM的一个扇区。在RTOS环境中,直接调用该函数可能会导致系统阻塞,尤其是在多任务环境下。为了避免这种情况,建议将EEPROM操作放在一个独立的任务中,或者使用非阻塞的方式进行操作。例如,可以使用RTOS提供的信号量或消息队列机制,确保EEPROM操作不会影响其他任务的执行。
此外,flag1=0的用途不明确,建议在代码中添加注释,说明该变量的作用,以便后续维护和调试。
总结来说,vSystemInit函数在RTOS环境中扮演着重要的角色,确保系统硬件资源的正确初始化。对于EEPROM操作,建议采用非阻塞方式,以避免影响系统的实时性。同时,代码中的关键变量和操作应添加必要的注释,以提高代码的可读性和可维护性。
[本文内容由国芯人工智能辅助生成,仅供参考]
有些宏定义没设置IAP_TPS看下是不是这个问题。
可以对比例程测试,或者上传工程看下。
页:
[1]