|
|
  |
Строковые и символьные типы в AVR С |
|
|
|
Mar 6 2006, 21:02
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zheka @ Mar 6 2006, 22:53)  defunct, знаете, в С для AVR я ноль. В некоторых других сферах я считаю себя профессионалом. И поверьте, никогда не позволял себе оскорблять новичков, задающих "тупые" вопросы. И вам не позволю. Или дайте дельный совет или молчите. Дельный совет я вам уже дал. Читайте. После прочтения приведенного выше описания языка у вас как минимум 80% если не 90% вопросов отпадет. А мелочи на вроде модификаторов адресного пространства __flash и т.п. вы можете найти хелпе к вашему компилятору. насчет оскорблений, если вы их заметили с моей стороны, то пожалуйста прочитайте для начала это: http://ln.com.ua/~openxs/articles/smart-qu...html#grovelling после прочтения, возможно, вы не сможете назвать маленький упрек - оскорблением.
|
|
|
|
|
Mar 6 2006, 21:21
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zheka @ Mar 6 2006, 23:10)  А первая ваша ссылка на язык С - что-то я не вижу там ничего связанного с AVR. И вы мне это рекомендуете после того, как я (новичок) 3 час переделывал проект, заточенный под ImageCraft, в CodeVision. Понимаете, есть отдельно C и есть отдельно AVR. Вы зашли в тематический форум AVR, который посвящается по больше части особенностям AVR, а не особенностям языка C. "Отдельно мухи, отдельно котлеты", а вы пытаетесь совместить сразу и то и то, от того получается такое громадное количество вопросов, вплоть до совсем не подходящих к тематике конференции: Цитата И как вообще организовать массив из строк? Вам же будет проще разобраться в ваших вопросах, если вы разделите вашу задачу изучения AVR+C, на две отдельные задачи - изучение C и изучение AVR. Получится конечно несколько дольше, но зато точно качественнее. Цитата Интересно, вам лень ответить на мой вопрос? Наверное вы сами не знаете на него ответ. мне не лень, иначе бы я не тратил свое время на общение с Вами. Просто предыдущие посты мне подсказывают, что это не будет Вашим последним вопросом, т.к. имеют место пробелы в азах. Цитата Знаете, бегло просмотрел последнюю ссылку в течении 30 секунд - раз 5 наткнылся на мысль, что отвлекать от темы на мелочи и пустяки вредно. Так вот не отвлекайте. Все-таки прочитайте, оно полезно будет
|
|
|
|
|
Mar 7 2006, 05:15
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(zheka @ Mar 7 2006, 03:10)  А первая ваша ссылка на язык С - что-то я не вижу там ничего связанного с AVR. И вы мне это рекомендуете после того, как я (новичок) 3 час переделывал проект, заточенный под ImageCraft, в CodeVision. Прошу прощения, но позволю себе заметить, что нет такого понятия "С для AVR". Нет понятия "С для ххх", где ххх - любой процессор. Есть язык С, есть на него Стандарт АНСИ/ИСО, есть куча книжек. И есть конкретные реализации, которые должны по максимуму удовлетворять Стандарту. Для решения каких-то нестандартных задач, но нуждающихся в поддержке - например, работа с флешью в AVR, конкретная реализация вводит специальные расширения (__flash, в случае IAR). Но это нестандартные для С вещи и они не делают язык "С для AVR". Поэтому (не касаясь формы высказываний, только сути) совет Вам дали совершенно правильный - учите отдельно С, отдельно AVR, как аппаратуру процессора, так и расширения реализации (EWAVR, CodeVision, ImageCraft, AVR-GCC). И понимания у Вас сразу прибавится на качественно другом уровне. Тот же С удобно учить не на AVR, а на PC, взяв какой-нито Borland С/С++, MS Visual Studio, GCC или любой другой продходящий компилятор. Все эти вопросы с объявлениями, с размещением объектов в памяти, с синтаксическими нюансами удобнее, проще и быстрее отлаживать на PC. Более того, даже опытные разработчики не брезгуют алгоритмы сначала на PC обкатать, а затем в МК включать - главное, чтобы код был написан грамотно, переносимо. Делайте, как советуют, и все получится. Удачи.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 7 2006, 11:25
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Блин,да открой ты хелп к кодвижину,там безумно подробно описано как размещать строки и указатели на них во всех 3 видах(озу,еепром,флаш)во всех сочетаниях. или так: flash char *flash MODEM_AT[]={"AT","AT+CPIN=?","ATZE0Q0V1X4","AT&S0&C1&D2","ATS0=1S10=50", "AT+IFC=2,2","AT+CSNS=4","AT+CREG?","","AT+CSMS=1","","AT+CMGF=1","AT+CMGD=","AT&C1&D2 "AT+CMGS=","LAZAREVSKAY POWER ON"}; и обращаешься к нужной строке по индексу. или так flash char MODEM_RX_OK[]={'O','K',0}; и обращаешься по имени массива там еще есть варианты,почитай,хелп в вижине хороший.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Mar 7 2006, 11:26
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 7-02-05
Пользователь №: 2 473

|
Золотые слова, dxp. Подтверждаю, вот недавно обкатывал алгоритм опроса/определения всех устройств на шине 1Wire в среде MSVisual C. Получились этакие test cases. Затем заглушки фиктивных данных заменяются на функции получения этих самых данных - и порядок. Рекомендую.
|
|
|
|
|
Mar 7 2006, 18:22
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Умные тут все. Судя по постам даже не вчитывались в суть проблемы. Поскольку предлагали то, что уже было кем-то предложено ранее. И мои ответы о том что я эти советы опробовал, с приведением сообщений компилятора никого из здешних "корифеев" не ипали.
Между прочим, проблему то я решил. надо было просто объявлять эти строки глобально, в начале программы, а не внутри функции. А если внутри функции - то сразу после фигурной скобки. Кстати, уже после того как я это сделал, наткнулся на описание этой тонкости не в мануале, а на каком-то форуме, где такой же новичок как я, спрашивал об этом у других. Что, умники, наверняка сами натыкались на эти грабли, неужели сложно было предположить что моя ошибка именно в этом? Я ведь, заметьте, не просил вас писать за меня программу, я приводил код, и просил разобраться.
Так вот по поводу местоположения объявления строк - кто тут кричал, мол учи C++ Builder? В Buildere локальные переменные можно объявлять где угодно.
Тактичней надо быть, а не обвинять других в тупости.
Defunct, вы были в одном правы. Следующий вопрос у меня появился. Прежде чем задать, я скажу, что долго искал ответ в интернете, но не нашел.
Как работать со строками, содержащими русские буквы? У меня CodeVision при попытке передать любую русскую букву в функцию, передает вместо ее кода код 40 (символ "(").
Грешен, встроенный мануал CodeVision'a не читал, уверен, что русские буквы там ничего нет
Сообщение отредактировал zheka - Mar 7 2006, 18:30
|
|
|
|
|
Mar 8 2006, 18:19
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
zheka Я еще раз насчет строковых констант-имхо,ты не прав.Это в С++ локальные переменные можно обьявлять в любом месте,а в С сразу по обьявлению функции.Да и как может быть строковая константа,лежащая в флеш,локальной,сам подумай. Ты работаешь с графическим ЖКИ?Я с ними не работал,но на работе какие-то библиотеки есть,могу глянуть.Да и сам можешь поискать,я их с нета стащил.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Mar 13 2006, 16:57
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Помогите плз... Три дня бьюсь - нифига.... ПРограммирую на ATMega8 индикатор от Nokia3310. Пользуюсь CodeVision. Вот файлы NokiaLCD.h Цитата /*--------------------------------------------------------------------------------------------------
Name : NokiaLCD.h
Description : Header file for Nokia 84x48 graphic LCD driver.
Author : 2003-03-08 - Louis Frigon.
History : 2003-03-08 - First release.
--------------------------------------------------------------------------------------------------*/ #ifndef _NOKIALCD_H_
#define _NOKIALCD_H_
/*-------------------------------------------------------------------------------------------------- General purpose constants --------------------------------------------------------------------------------------------------*/ #define NULL 0 #define FALSE 0 #define TRUE 1
#define LCD_X_RES 84 #define LCD_Y_RES 48
// Mega8 port B pinout for LCD. #define LCD_DC_PIN 0x01 // PB0 #define LCD_CE_PIN 0x04 // PB2 #define SPI_MOSI_PIN 0x08 // PB3 #define LCD_RST_PIN 0x10 // PB4 #define SPI_CLK_PIN 0x20 // PB5
#define LCD_CACHE_SIZE ((LCD_X_RES * LCD_Y_RES) / 8)
/*-------------------------------------------------------------------------------------------------- Type definitions --------------------------------------------------------------------------------------------------*/ typedef char bool; typedef unsigned char byte; typedef unsigned int word;
typedef enum { LCD_CMD = 0, LCD_DATA = 1
} LcdCmdData;
typedef enum { PIXEL_OFF = 0, PIXEL_ON = 1, PIXEL_XOR = 2
} LcdPixelMode;
typedef enum { FONT_1X = 1, FONT_2X = 2
} LcdFontSize;
typedef enum { NORMAL = 0, INVERSE = 1
} LcdPixelInverse;
/*-------------------------------------------------------------------------------------------------- Public function prototypes --------------------------------------------------------------------------------------------------*/ void LcdInit ( void ); void LcdClear ( void ); void LcdUpdate ( void ); void LcdGotoXY ( byte x, byte y ); void LcdChr ( LcdFontSize size, byte ch, LcdPixelInverse inverse ); void LcdStr ( LcdFontSize size, byte *dataPtr, LcdPixelInverse inverse ); void LcdPixel ( byte x, byte y, LcdPixelMode mode ); void LcdLine ( byte x1, byte y1, byte x2, byte y2, LcdPixelMode mode ); void LcdBar ( byte x1, byte y1, byte x2, byte y2, LcdPixelMode mode ); void LcdRect ( byte x1, byte y1, byte x2, byte y2, LcdPixelMode mode ); #endif // _NOKIALCD_H_ /*-------------------------------------------------------------------------------------------------- End of file. --------------------------------------------------------------------------------------------------*/ И еще - NokiaLCD.с Цитата /*--------------------------------------------------------------------------------------------------
Name : NokiaLCD.c
Description : This is a driver for the Nokia 84x48 graphic LCD.
Author : 2003-03-08 - Sylvain Bissonnette
History : 2003-02-08 - First release (v0.1) derived from Sylvain Bissonnette code base. 2003-03-09 - v0.2, Louis Frigon: 2x fonts support. 2003-03-20 - v0.3: Serialization optimized,
--------------------------------------------------------------------------------------------------*/ #include "macros.h" #include "iom8v.h" #include <stdio.h> #include <stdlib.h> #include <string.h>
#include "NokiaLCD.h"
#define LCD_FIRMWARE_VERSION 0.3
/*-------------------------------------------------------------------------------------------------- Private function prototypes --------------------------------------------------------------------------------------------------*/ // Function prototypes are mandatory otherwise the compiler generates unreliable code. flash char f[]="3"; #pragma warn- eeprom char e[16]; #pragma warn+ char r[16];
static void LcdSend ( byte data, LcdCmdData cd ); static void Delay ( void );
flash char *flash MainMenu[]= { "Поиск", "Каналы", "Настройка" };
/*-------------------------------------------------------------------------------------------------- Character generator
This table defines the standard ASCII characters in a 5x7 dot format. --------------------------------------------------------------------------------------------------*/ static const byte FontLookup [256][5] = { { 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp #0 { 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // % { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * #10 { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x50, 0x30, 0x00 }, // , { 0x10, 0x10, 0x10, 0x10, 0x10 }, // - { 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 #20 { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > #30 { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H #40 { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R #50 { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 #60 { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f #70 { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p #80 { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z #90 { 0xFF, 0x00, 0xFF, 0x00, 0xFF } // ff
};
/*-------------------------------------------------------------------------------------------------- Global Variables --------------------------------------------------------------------------------------------------*/ static byte LcdCache [ LCD_CACHE_SIZE ];
static int LcdCacheIdx; static int LoWaterMark; static int HiWaterMark; static bool UpdateLcd;
/*--------------------------------------------------------------------------------------------------
Name : LcdInit
Description : Performs MCU SPI & LCD controller initialization.
Argument(s) : None.
Return value : None.
--------------------------------------------------------------------------------------------------*/
void LcdInit ( void ) { // Pull-up on reset pin. PORTB |= LCD_RST_PIN;
// Set output bits on port B. DDRB |= LCD_RST_PIN | LCD_DC_PIN | LCD_CE_PIN | SPI_MOSI_PIN | SPI_CLK_PIN;
Delay();
// Toggle display reset pin. PORTB &= ~LCD_RST_PIN; Delay(); PORTB |= LCD_RST_PIN;
// Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4 SPCR = 0x50;
// Disable LCD controller PORTB |= LCD_CE_PIN;
LcdSend( 0x21, LCD_CMD ); // LCD Extended Commands. LcdSend( 0xC8, LCD_CMD ); // Set LCD Vop (Contrast). LcdSend( 0x06, LCD_CMD ); // Set Temp coefficent. LcdSend( 0x13, LCD_CMD ); // LCD bias mode 1:48. LcdSend( 0x20, LCD_CMD ); // LCD Standard Commands, Horizontal addressing mode. LcdSend( 0x0C, LCD_CMD ); // LCD in normal mode.
// Reset watermark pointers. LoWaterMark = LCD_CACHE_SIZE; HiWaterMark = 0;
LcdClear(); LcdUpdate(); }
/*--------------------------------------------------------------------------------------------------
Name : LcdContrast
Description : Set display contrast.
Argument(s) : contrast -> Contrast value from 0x00 to 0x7F.
Return value : None.
Notes : No change visible at ambient temperature.
/*--------------------------------------------------------------------------------------------------
Name : LcdGotoXY
Description : Sets cursor location to xy location corresponding to basic font size.
Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6
Return value : None.
--------------------------------------------------------------------------------------------------*/ void LcdGotoXY ( byte x, byte y ) { LcdCacheIdx = (x - 1) * 6 + (y - 1) * 84; }
/*--------------------------------------------------------------------------------------------------
Name : LcdChr
Description : Displays a character at current cursor location and increment cursor location.
Argument(s) : size -> Font size. See enum. ch -> Character to write.
Return value : None.
--------------------------------------------------------------------------------------------------*/ void LcdChr ( LcdFontSize size, byte ch, LcdPixelInverse inverse ) { byte i, c; byte b1, b2; int tmpIdx; if ( LcdCacheIdx < LoWaterMark ) { // Update low marker. LoWaterMark = LcdCacheIdx; }
if ( (ch < 0x20) || (ch > 0xFF) ) { // Convert to a printable character. ch = 92; }
if ( size == FONT_1X ) { for ( i = 0; i < 5; i++ ) { if (inverse==NORMAL){ LcdCache[LcdCacheIdx++] = FontLookup[ch-32][i] << 1;} if (inverse==INVERSE){ LcdCache[LcdCacheIdx++] = ~FontLookup[ch-32][i] << 1;} } } else if ( size == FONT_2X ) { tmpIdx = LcdCacheIdx - 84;
if ( tmpIdx < LoWaterMark ) { LoWaterMark = tmpIdx; }
if ( tmpIdx < 0 ) return;
for ( i = 0; i < 5; i++ ) { c = FontLookup[ch - 32][i] << 1; b1 = (c & 0x01) * 3; b1 |= (c & 0x02) * 6; b1 |= (c & 0x04) * 12; b1 |= (c & 0x08) * 24;
c >>= 4; b2 = (c & 0x01) * 3; b2 |= (c & 0x02) * 6; b2 |= (c & 0x04) * 12; b2 |= (c & 0x08) * 24;
LcdCache[tmpIdx++] = b1; LcdCache[tmpIdx++] = b1; LcdCache[tmpIdx + 82] = b2; LcdCache[tmpIdx + 83] = b2; }
// Update x cursor position. LcdCacheIdx += 11; }
if ( LcdCacheIdx > HiWaterMark ) { // Update high marker. HiWaterMark = LcdCacheIdx; }
// Horizontal gap between characters. if (inverse==NORMAL){ LcdCache[LcdCacheIdx++] = 0x00;} if (inverse==INVERSE){ LcdCache[LcdCacheIdx++] = 0xFF;} }
/*--------------------------------------------------------------------------------------------------
Name : LcdStr
Description : Displays a character at current cursor location and increment cursor location according to font size.
Argument(s) : size -> Font size. See enum. dataPtr -> Pointer to null terminated ASCII string to display.
Return value : None.
--------------------------------------------------------------------------------------------------*/ void LcdStr ( LcdFontSize size, byte *dataPtr, LcdPixelInverse inverse ) {
while (*dataPtr) { LcdChr( size, *dataPtr++, inverse ); } }
void main () { int i,j; char flash *ptr_to_flash; char eeprom *ptr_to_eeprom; char *ptr_to_ram; char s; // copy the string f from FLASH to // the string e in EEPROM ptr_to_flash=f; ptr_to_eeprom=e; while (*ptr_to_flash) *ptr_to_eeprom++=*ptr_to_flash++;
// copy the string e from EEPROM to // the string r in RAM ptr_to_eeprom=e; ptr_to_ram=r; while (*ptr_to_eeprom) *ptr_to_ram++=*ptr_to_eeprom++;
LcdInit(); Delay();
LcdGotoXY(1,1);
sprintf(s,"%i",ptr_to_ram);
LcdStr(FONT_1X, s, NORMAL);
LcdUpdate(); } /*-------------------------------------------------------------------------------------------------- End of file. --------------------------------------------------------------------------------------------------*/ При вызове LcdStr(FONT_1X, s, NORMAL); пишет "function parameter 2 not compartible with its declaration" Хочу отметить кое-что. Еще до того, как я начал пытаться читать и писать в EEPROM я не мог вывести на экран даже обычную строку, хотябы через кавычки. Помогло, когда в объявление функции void LcdStr ( LcdFontSize size, char *dataPtr, LcdPixelInverse inverse ) Я вместо char написал char __flash. Однако, прочитанную из EEPROM строку так не выведешь, ошибку типа выдает. Я убрал flash. Как мне вызывать получившуюся в итоге функцию, чтобы: 1. Выводить строки из flash. 2. Выводить строки из EEPROM 3. Выводить значения переменных, которые им присваиваются в ходе работы программы. p.s. Текст некоторых функций я убрал, так как сообщение не отправляется из-за большой длины. В аттаче все файлы.
Сообщение отредактировал zheka - Mar 13 2006, 16:58
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|