Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Портирование кода из WINAVR в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
sb_centr
Здравствуйте. Начал разбираться с исходниками для WIZ5100. Исходники написаны под WINAVR.
Файл task_config.h:
CODE

#include <pgmspace.h>
//#include <eeprom.h>

#define EEPOP 0
#define SPECIALOP 0x82

#define VER_H 1
#define VER_L 3
#define SOCK_CONFIG 3
#define EEPADDR_VER 4

#define SBUF_LENGTH 253

// Special char values
#define CR 0x0D
#define LF 0x0A

#define CONFIG_CLIENT_PORT 48713
#define CONFIG_SERVER_PORT 48714
#define CONFIG_UP_PORT 48715


typedef struct
{
unsigned char op[4]; //0 ~ 3
unsigned char ver[2]; //4 ~ 5
unsigned char mac[6]; //6 ~ 11
unsigned char ip[4]; //12 ~ 15
unsigned char subnet[4]; //16 ~ 19
unsigned char gw[4]; //20 ~ 23
unsigned char dhcp; //24
unsigned char myMac[6]; //25 ~ 30 //the old mac address; Ver 1.3; 2010.02.08
} StrConfigParam;


#define DefConfigParam "x82x82x82x82x00x00x00x08xDCx00x00x00xC0xA8x00x03xFFxFFxFFx00xC0xA8x00x01x00
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x08xDCx00x00x0
0"

Файл task_config.с:

#include <ioavr.h>
#include <inavr.h>
#include <stdio.h>

#include <string.h>
#include "mcu/types.h"
#include "iinchip/socket.h"
#include "util/wiz_util.h"

#include "task_config.h"

StrConfigParam NetworkParam, MSGConfig;
extern unsigned char m_FlagFlashWrite;


extern void InitFlash(void);
//-----------------------------------------------------------------------------
void default_network(void)
{
// unsigned long ip;

memcpy(&NetworkParam, DefConfigParam, sizeof(NetworkParam));

eeprom_write_block(&NetworkParam, (unsigned char*)EEPOP, sizeof(NetworkParam));
eeprom_write_byte((unsigned char*)EEPADDR_VER, VER_H);
eeprom_write_byte((unsigned char*)(EEPADDR_VER+1), VER_L);
}


//-----------------------------------------------------------------------------
void SetConfig(void)
{
unsigned char temp;

// Get Network Parameters
temp = eeprom_read_byte((unsigned char*)EEPOP);


if( temp != SPECIALOP)
{
// This board is initial state
default_network();
}
else
{
eeprom_read_block(&NetworkParam, (unsigned char*)EEPOP, sizeof(NetworkParam));
//check version
if( (eeprom_read_byte((unsigned char*)EEPADDR_VER) != VER_H) ||
(eeprom_read_byte((unsigned char*)(EEPADDR_VER+1)) != VER_L) ) {
eeprom_write_byte((unsigned char*)EEPADDR_VER, VER_H);
eeprom_write_byte((unsigned char*)(EEPADDR_VER+1), VER_L);
}
NetworkParam.ver[0] = VER_H;
NetworkParam.ver[1] = VER_L;
}

setSIPR(NetworkParam.ip);
setGAR(NetworkParam.gw);
setSUBR(NetworkParam.subnet);
setSHAR(NetworkParam.mac);


}
//-----------------------------------------------------------------------------

ПОдскажите пожалуйста как можно написать функции:
eeprom_write_block
eeprom_write_byte
eeprom_read_block
eeprom_read_byte
используя обращение к __eeprom в IAR?

Заранее благодарен
ut1wpr
Цитата(sb_centr @ Dec 10 2011, 14:13) *
ПОдскажите пожалуйста как можно написать функции:
eeprom_write_block
eeprom_write_byte
eeprom_read_block
eeprom_read_byte
используя обращение к __eeprom в IAR?

Заранее благодарен

IAR сам разберется.
Достаточно определить класс данных как __eeprom
Код
__eeprom char ee_welcome_string[] = "UT1WPR";
__eeprom int Alpha;
__eeprom int Beta = 65535;


И работать с ними без вызова каких-либо функций
Код
Alpha = 0x1234;
Omega = Beta / 4;

И даже
Код
Alpha = Beta // при условии соблюдения однотипности

В документации на IAR все это есть. Есть сомнения о ее прочтении. sm.gif
sb_centr
Большое спасибо за ответ. Разобрался, все действительно элементарно laughing.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.