Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

RQ: Помощ за първа проба на C-проект на AVR Studio-4
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8525
Страница 1 от 2

Автор:  NikB [ Вто Фев 08, 2011 4:52 pm ]
Заглавие:  RQ: Помощ за първа проба на C-проект на AVR Studio-4

За първи път пробвам C с AVR Studio 4 (ползвам май последното 4.18, билд 716)

Опитвам се да компилирам сорса на един програматор (AVR/89S съвместим с AVR910)

Указал съм файла main.c като единствен в сорса (пробвах разни варианти :))
Струва ми се доста тъпо в полето за съобщения да пише само това, по-долу и не виждам никаква интерактивна възможност за повече иноформация:
(разгледах и makefile - и то е в приложения rar, но не разбрах нищо :))

MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
Error Makefile 80: Command syntax error
*** 1 errors during make ***
Build failed with 1 errors and 0 warnings...
MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
Error Makefile 71: Command syntax error
*** 1 errors during make ***
Build failed with 1 errors and 0 warnings...


Прилагам и проекта - моля, помогнете да му пусна компилирането на това :), благодаря!

Прикачени файлове:
Коментар на файл: Първи опит :)
avr910.rar [55.13 KiB]
205 пъти

Автор:  michev [ Вто Фев 08, 2011 5:45 pm ]
Заглавие: 

WinAVR инсталира ли?
Гледам че, мейк командата ти е борландска, а не би трябвало. Не съм 100% сигурен дали ще работи с нея, но за по - сигурно си използвай тази която ти идва с WinAVR-a (или ако си изтеглил toolchain-a от сайта на атмел).

Автор:  NikB [ Сря Фев 09, 2011 1:12 am ]
Заглавие: 

michev написа:
WinAVR инсталира ли?
Благодаря много - с това инсталиране поне се стига до нормално съобщения за грешки (10 грешки и 2 предупреждения).
:)
Повечето са от рода:
../usbdrv.h:315: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'unsigned'
Вероятно проектът е за друг комполатор или за друга версия. Може би не разпознава kлючовата дума "extern" или очаква друг синтаксис? (следващия фрагмент са 314, 315 и 316 ред от usbdrv.h)
Код:
#if USB_CFG_EXTERNAL_CONFIG_DESCRIPTOR_LENGH
extern PROGMEM UCHAR usbDescrConfig[];
#endif


ПП
Пише, че е компилирано с IAR v.4.10B

Автор:  head_up [ Сря Фев 09, 2011 1:50 am ]
Заглавие: 

нито съм по AVR-тата, нито съм им пипал някога средата, но PROGMEM би трябвало да означава, че масива usbDescrConfig[] се намира в флаша, ще рече - само за четене. И то е така по неговия смисъл в структурата на USB комуникацията - това само се докладва на хоста. Странното е, че сефре го виждам записано по този начин. w/e може би и твоя компилатор го среща тепърва? На първо време опитай се да разбереш какво означава тази дума в средата, с която е компилирано в оригинал (IAR v.4.10B) и в последствие виж каква е ключовата дума в AVR Studio-4. А това AVR Studio-4 случайно да ползва Гнус отдолу?
колкото до extern - не може да не се подържа, ще е светотатство :)

Едит: какво ще кажеш да пробваш да заместиш PROGMEM с const на всякъде където го има, като там където върви в комплект с extern просто да го премахнеш, компилатора ще се усети какво да направи? Би трябвало да познае const и да го сложи във флаша пак.

Автор:  marcuka68 [ Сря Фев 09, 2011 4:41 pm ]
Заглавие: 

Не четох кода, но мой съвет е, при много грешки в процеса на компилиране, закоментирваш кода, докато всичко се компилира. След като се компилира всичко, по малко махаш коментарите , докато не оправиш всички грешки.

Автор:  goose [ Сря Фев 09, 2011 5:20 pm ]
Заглавие: 

PROGMEM ти е проблема, не намира дефиниция на нещо такова :>
Изрови какво е то и подозирам, че ще решиш проблема :>

Автор:  michev [ Сря Фев 09, 2011 9:39 pm ]
Заглавие: 

PROGMEM "проблема" се решава като си инклуднеш -
Код:
#include <avr/pgmspace.h>

Следващият проблем който ще лъсне е "__delay_cycles" - решение:
Код:
#include <avr/delay.h>
#define __delay_cycles(n) _delay_loop_2((n) / 4)

Обаче след това, проблемът се превръща в още 1 тон проблемчета ;) - една торба статични функции, които не са декларирани в началото на файла като статични и съотвено gcc-то се сърди.

Успех

Автор:  NikB [ Чет Фев 10, 2011 12:41 pm ]
Заглавие: 

michev написа:
PROGMEM ...
Успех

Благодаря!
Това се оправи :) вече дава по-разбираеми грешки :):

1. Например, ако в някой файл прототипът на някоя функция е декларирана в началото на файла без "static", а по-нататък, там, където е тялото й, е декларирана като static, компилатора посочва две грешки:
а. ../avr910.c:594: error: static declaration of 'GetDevCodes' follows non-static declaration
б. ../avr910.c:196: error: previous declaration of 'GetDevCodes' was here
(оправям го, като слагам static и на първата декларация.
Това двойно деклариране за четливост ли се прави или заради forwarding ли или защо?)
(ПП така, с грешки, имаше декларирани близо 30 функции)

и

2. В асемблерските проекти, в списъка на сорс файловете се указва един като entry. В проекта на C няма такова нещо. Какъв е критерия за определяне на входната точка в програмата? Името на файла main.c или търси функция main(void)?

Автор:  michev [ Чет Фев 10, 2011 12:58 pm ]
Заглавие: 

Функция -
Код:
int main()
, името на файла не е от значение. Можеш и преди мейн-а да сложиш твой код, но за целта ще трябва да RTFM :)

Автор:  NikB [ Чет Фев 10, 2011 1:03 pm ]
Заглавие: 

И 3. Не открива референциите, декларирани в asm файлове, дори и файлът да е добавен в ПРОЕКТА в секцията за сорс файлове (в IDE дървото на сорс файловете) Вероятно не знам как да укажа на проекта, че е вмъкнат asm файл (когато трябва да добавя "c" файл е достатъчно да го добавя в дървото на сорс файловете в проекта)
(Ще си чета книгите :) :))

Автор:  NikB [ Нед Фев 13, 2011 8:50 pm ]
Заглавие: 

AVR Studio, WinAVR:

Каква може да е причината за грешка:
"../USBDRVASM.s:88: Error: number must be positive and less than 64"
на ред със съдържание:
in x1,SREG ;1
в .s файл вмъкнат в "C" проект?

Автор:  Ники [ Пон Фев 14, 2011 3:06 am ]
Заглавие: 

по спомен инструкция IN е за вход-изход и работи с регистри до адрес 63...

Автор:  NikB [ Пон Фев 14, 2011 10:04 am ]
Заглавие: 

Благодаря, точно такова изглежда.
Тоя сорс е писан за IAR и, вероятно в него се компилира вярно (но аз няма как да проверя :)).
И къде ли е ключа за бараката? За WinAVR или някой хедър файл е различен (нeправилно указан), или някоя директива или условно компилиране са объркани. Ще имам проблем с търсенето, но съм се заял с тоя проект и ще видя до къде ще я докарам :)

Впрочем, докато стигна до тук, в няколко хедър файла се наложи да сложа условно компилиране, защото се цитираха и в "C" и в "S" файлове, а хедър файловете, вмъкнати в "S" (asm) даваха грешки на директива "typedef" (асемблера не ги разпознава): по препоръка от гугъл :), добавих конструкция от рода:
#ifndef __ASSEMBLER__
typedef ...
...
#endif

Автор:  michev [ Пон Фев 14, 2011 4:53 pm ]
Заглавие: 

Ники написа:
по спомен инструкция IN е за вход-изход и работи с регистри до адрес 63...

Прав си - работи с адреси от 0 до 63 включително, само дето SREG e = 63 , т.е си е на коректен адрес.
Понеже компилатора не реве SREG да е недефиниран, то значи е дефиниран някъде, но не сочи на правилн адрес.

NikB, не знам защо толкоз се тормозиш с този проект да го подкараш с gcc..
Ако толкова много държиш на тоя тип програматори, отиди ей тук, изтегли си кода и си свиркай с уста :) (тесван е и се компилира с WinAVR, че даже и работи..)

Автор:  NikB [ Пон Фев 14, 2011 5:12 pm ]
Заглавие: 

Aбе мисля, че това е същото (това, което препоръчваш ползва ATMega8-16, а не успях да му намеря DIP корпус :), за да го спретнат колегите).
Впрочем, програматорът не е проблем - тука ползвам някакъв.
Просто се опитвам да свикна с C и WinAVR средата (но, като цяло AVR Studio-то за сега е доста дразнещо, поне за мен :))

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/