本帖最后由 liuchang 于 2016-10-10 11:45 编辑
小弟这几天在玩stm32F4(探索者F4,MDK5,上ucosii操作系统)上自带的EEPROM(AT24C02).对其中的读写函数,小弟有几个疑惑,恳请大神指教~~~
1>现象1: 这是一个tcp client线程
[mw_shl_code=c,true]void tcp_client_thread(void *arg)
{
struct netconn *conn;
struct lwip_info info;
struct ip_addr server_ip;
uint8_t RecvBuf[6] = {0};
uint8_t System_Par_Temp_Buf[55];
uint8_t str_ip[16] = {0}, str_port[16] = {0};
Address_Init();
LED_Init();
LCD1602_Init();
LCD1602_Clear();
delay_ms(30); //经过试验验证:这里必须delay 30ms或者以上,AT24CXX_Read()才能将数据读到System_Par_Temp_Buf中
AT24CXX_Read(0, System_Par_Temp_Buf, 55);
StringToNum(&info, System_Par_Temp_Buf);
StringToLCD1602(str_ip, str_port, System_Par_Temp_Buf);
LCD1602_WriteString(0, 0, (char *)str_ip);
LCD1602_WriteString(0, 1, (char *)str_port);
while(1)
{
err_t connect_err;
err_t recv_err;
struct netbuf *inbuf;
if(OSSemAccept(sem_server_reset) || OSSemAccept(sem_server_config))
{
//delay_ms(30); //这里不需要使用delay(),AT24CXX_Read()就能将数据读到System_Par_Temp_Buf,为什么???
AT24CXX_Read(0, System_Par_Temp_Buf, 55);
StringToNum(&info, System_Par_Temp_Buf);
StringToLCD1602(str_ip, str_port, System_Par_Temp_Buf); [/mw_shl_code]
现象2:这是另外一个线程
[mw_shl_code=c,true]void lwip_reset_thread(void *p_arg)
{
OS_CPU_SR cpu_sr;
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET) //reload°′¼ü±»°′ÏÂ,»Ö¸′3ö3§éèÖÃ
{
OSTimeDlyHMSM(0, 0, 3, 0);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
//OS_ENTER_CRITICAL();
AT24CXX_Write(0, System_Par_Init_Buf, 55); //经过试验,这里不能使用OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL(); 否则,AT24CXX_Write()写入System_Par_Init_Buf的数据就会有错误,我实在想不通为什么,恳请大神指教
//OS_EXIT_CRITICAL();
IP4_ADDR(&ipaddr, info.local_ip[0], info.local_ip[1], info.local_ip[2], info.local_ip[3]);
IP4_ADDR(&netmask, info.netmask[0], info.netmask[1], info.netmask[2], info.netmask[3]);
IP4_ADDR(&gateway, info.gateway[0], info.gateway[1], info.gateway[2], info.gateway[3]); }
}
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>