но у меня ничо неработало.
Ну собственно я думал что лепить кучу девяток как-то через чур по профански )
где то я уже слышал/видел itoa() и iloa() кажется, буду разбираться )
Symbiosis писал(а):на int arr[ARRAY_LEN][3]; cavr ругается, что мол the programm has no 'main' function . и need array size . (((
Это не на массив компилятор ругается, а именно на отсутствие функции main - или её действительно нет, или из-за предыдущих ошибок он её "не видит". И need array size тоже следует понимать буквально - я же многоточие поставил лишь чтобы место для длины массива обозначить, а не как языковую конструкцию.
Symbiosis писал(а):надо уже конвертировать число в строку и выводить по частям. Только как это делается ума не приложу (((
В твоем случае, я думаю, нужно возложить эту задачу на библиотечную функцию sprintf, хоть она и потребует места в памяти программ, но тебе сейчас так проще будет.
А вообще - было бы проще отвечать, если бы было видно, что ты там такое наваял, что компилятор главной функции не видит и цикла while не исполняет.
Кстати, циклы выше ограничены по числу исполнений разрядностью переменной i, т.е. 65535, если оно инт беззнаковый.
Истинно бесконечные циклы while(1) и for ( ;; ).
Так что надо i обнулять где-то ну и вообще следить за ней
Ох, ребят! Вы тут написали, так сложно все, можно сказать перевернули все мои представления ))) Завтра думаю разберусь, а седня к экзамену готовиться надо (. Пока вот вопросик про что )
Так что надо i обнулять где-то ну и вообще следить за ней
Вот что значит следить ? что она натворить то может ? Я конечно могу пофантозировать, но думаю это не совсем уместно будет )))
А код мой смотреть то и нечего собственно, все что прислал - это весь код, а выше только хрень, которую генератор СВАВР навоял + массивчик написал там и усе )
Я просто хочу сперва разобраться с массивом и выводом его, отладить... А уж потом пробывать выдергивать его из текстового файла на карте памяти, а то если сразу все мутить мбуду, думаю запутаюсь и погрязну )
По поводу места в озу мне собственно не очень важно, ведь цель не шибко ресурсоемка, а юзаю мегу32, на первых порах лиж бы сделать рабочий девайс, а то грант уже написал, через пол года отчитываться, надо хоть пару экспирементов поставить, пусть без сд карты, надо лишь столик нанопозиционера двигать )
Я имел ввиду, что если Вы делаете цикл по i и все время ее увеличиваете, то рано или поздно переменная переполнится и станет 0. При этом переменная является еще и индексом для массива. Что случится при ее переполнении? Не нужен ли выход из цикла? Или может надо запустить цикл заново с начальными условиями? Или может изначально ограничить максимальное значение i? Здесь уж все от Вас зависит...
Капец полный
Забуть про массивы.
Я тоже всё мучался в си когда с бейсика пересел, что массивы как тоне массивились
Короче у тебя есть память, вот с неё и читай/пиши.
Массив представляет собой кусок памяти размером n*m
n - колличество элементов
m - размер одного элемента
Доступ к элементу массива осуществляется просто: (lpMass*i*m)
lpMass - указатель на начало массива/адрес блока памяти
i - порядковый номер элемента массива
m - размер одного элемента
Вот тебе простейшее преобразование строки в число:
__inline SIZE_T StrToUNum(LPCSTR lpcszString,SIZE_T dwStringLen)
{
SIZE_T dwNum=0;
BYTE bCurentFigure;
while(dwStringLen)
{
if ((bCurentFigure=((*lpcszString)-48))<10)
{
dwNum*=10;// сдвигаем предыдущее число на один разряд чтоб добавить в младший разряд новую цифру
dwNum+=bCurentFigure;// добавляем цифру в младший разряд
}
lpcszString++;// перемещаем указатель на следующую позицию
dwStringLen--;// уменьшаем длинну
}
return(dwNum);
}
Yellow Tiger
По вашей конструкции вылезли ошибки. По всей видимости не подключил каких-то библиотек. А вот какие подключить то надо ?
Сообщения след-го содержания
undefined symbol 'SER1CharsPresent'
undefined symbol 'SER1Puts'
not in switch (это так ругается на строку default:)
Ivan_83
Чо то я не въехал потихой (((
Точнее я понял про что вы говорите:
Короче у тебя есть память, вот с неё и читай/пиши.
Массив представляет собой кусок памяти размером n*m
n - колличество элементов
m - размер одного элемента
Доступ к элементу массива осуществляется просто: (lpMass*i*m)
lpMass - указатель на начало массива/адрес блока памяти
i - порядковый номер элемента массива
m - размер одного элемента
Но что это значит? что мне можно просто писать в ячейки памяти цыфры ?
Чуток еще подробней можно, а то голова не варит ( Третий день пытаюсь собраться с силами и поработать над этим, а чо то голова сразу болеть начинает, то ли грипп одолевает, то ли защитная реакция на этот проект )
__inline DWORD UNumToStr(SIZE_T dwNum,LPSTR lpszString,SIZE_T dwStringLen)
{
DWORD dwRet=0;
SIZE_T dwNumtm=1;
do
{
lpszString++;// перемещаем указатель на следующую позицию
dwStringLen--;// уменьшаем длинну
dwNumtm*=10;
}while(dwNum>dwNumtm && dwStringLen);
(*lpszString--)=0;
do
{
dwNumtm=dwNum;
dwNum/=10;
(*lpszString)=(CHAR)(48+(dwNumtm-(dwNum*10)));
lpszString--;// перемещаем указатель на следующую позицию
}while(dwNum);
return(dwRet);
}
Именно в ячейки.
Те когда вы всё отдаёте компилятору, то в итоге он всё именно так и делает.
Если взять указатель на начало массива, привести его к строке и отпечатать получите одну большую строку со всеми элементами массива (если конечно в каждом элементе строка не оканчивается нулём).
Symbiosis писал(а):По всей видимости не подключил каких-то библиотек. ... Сообщения след-го содержания
undefined symbol 'SER1CharsPresent'
undefined symbol 'SER1Puts'
not in switch (это так ругается на строку default:
Я же не готовый проект приводил, а лишь примерный код - вместо них нужно использовать доступные аналоги: SER1CharsPresent - проверяет наличие/отсутствие символа в буфере приема, SER1Puts - передает строку через USART.
Поскольку вопрос был задан только по способу формирования строки для вывода, я предположил, что функции вывода уже есть.
Ругательство на default - наведенная ошибка наверняка, исчезнет после указания действительных имен функций.
Symbiosis писал(а):собираюсь использовать карту памяти, а на нее записывать текстовый файл
Если будет текстовый файл с данными, то можно вообще ничего не преобразовывать, а прямо так и слать строки, прочитанные из файла, лишь снабдив их префиксами 'XV', 'YV' и 'ZV', и запятыми, согласно описанному формату.
Если будет текстовый файл с данными, то можно вообще ничего не преобразовывать, а прямо так и слать строки, прочитанные из файла, лишь снабдив их префиксами 'XV', 'YV' и 'ZV', и запятыми
прямо так и слать строки, ... снабдив их префиксами 'XV', 'YV' и 'ZV', и запятыми
Да нечего тут "подробнее" - если данные хранятся не в памяти, а в файле на флешке, то экономить незачем и можно хранить тройки чисел прямо в текстовом виде; тогда число не придется преобразовывать на лету из двоичного вида в текстовый и останется лишь снабдить каждое из трех чисел заголовком (префиксами 'XV', 'YV' и 'ZV') и проставить между ними запятые. Логически продолжая эту мысль (помним, что интерфейс с прибором - RS232, и команды подаются в текстовом виде - "Если на него подать команду по интерфейсу RS232 к примеру 'XV50'") можно упростить так:
- написать сами команды прямо в файле, то есть, уже с префиксами:
чтобы мелкоконтроллеру вообще ничего делать не нужно было - что прочитал из файла, то в прибор и послал!
И, наконец, уж совсем доведя все до логического завершения, упростить еще и так - выбросить нафик микроконтроллер с обвеской и флешку; программу для м/к не писать, файл с командами слать на 'прибор' прямо с компьютера, на котором готовились команды, по тому же самому RS232.
Налицо сплошная экономия - средств, времени, железа, софта и всего прочего, что только поддается экономии.
Именно! Я понимаю, когда ищут средства для решения насущной задачи, но когда высасывают из пальца задачу под имеющиеся средства - уж лучше совсем ни хрена не делать.
Уж вынужден напомнить, что вы абсолютно не знаете задачи целиком и требований предъявляемых к ней. А занимаетесь самодурством, считать себя гением приятно, не спорю ! )
А отдельный ПК стоит безусловно дешевле , соглашусь с вами! А самое главное легынький, маленький.
Когда подробности спрашивал, интересовало каким образом образом отделять, но что то сперва спросил потом подумал...
По поводу того чтобы текстовый файл снабдить префиксами ... Уже написал софт, который генерирует текстовый файл с циферами, а вот править нет возможности, файлы проекта утеряны, только приложение скомпилированное осталось.
Symbiosis язык С++ обладает в изобилии функциями работы с фалами и потоками, так же, имеются функции форматированного ввода и вывода(которые, между прочим, являются функциями чистого С, а не объектного С++).
Вот к примеру: