Ważna
informacja!
Przypominam o trwający konkursie (po)wakacyjnym na najlepszy artykuł o robotyce!
Więcej informacji, na stronie konkursowej.

[C] Pierwsze kroki

Autor Wiadomość
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 20-03-2012, 11:25   [C] Pierwsze kroki

Witam,
Przemogłem się. Postanowiłem spróbować C.
Zacząłem od Kursu AVR-GCC i przygotowania narzędzi i.... zaczęły się schody.
Zainstalowałem sobie WinAVR i przechodzę do tworzenia pliku Makefile. Robię wszystko dokładnie jak w kursie.
1) Podaję nazwę Main file name = "test".
2) Podaję C source files = pełna ścieżka do "test.c"
3) Określam inne parametry MCU, kompilatora i portu usb
4) Owieram sobie Notepad
5) wklejam prosty kod
Kod programu: Zaznacz cały

#include<avr/io.h>
#include<util/delay.h>

int main(void)
{

}

6) Zapisuję plik pod "test.c" i po Make All wyskakuje mi błąd:

> "make.exe" all
> Failed to create process: Nie można odnaleźć określonego pliku.
> Process Exit Code: 0
> Time Taken: 00:00

O czymś jeszcze zapomniałem?[/code]
Polecany artykuł z FORBOT.PL:
Podłączanie i obsługa urządzeń zewnętrznych

Artykuł zawiera schematy podłączania oraz opis niektórych często używanych urządzeń zewnętrznych w robotyce am... Czytaj całość

Postaw piwo autorowi tego posta
 
 
Grzesieq94 




Posty: 141
Pomógł: 6 razy
Otrzymał 13 piw(a)
Skąd: Gliwice
Programuję w:
C
Wysłany: 20-03-2012, 14:24   

Po pierwsze nie potrzebnie dodajesz do C source files test.c Skoro to jest główny plik to nie dodajesz go ponownie. Po drugie test.c i plik makefile musi być w tym samym katalogu.

Postaw piwo autorowi tego posta
 
 
 
dondu 



Posty: 903
Pomógł: 39 razy
Otrzymał 69 piw(a)
Skąd: Gliwice
Programuję w:
C
Wysłany: 20-03-2012, 17:39   

Po trzecie zainstaluj AVR Studio i zapomnij o problemach z makefile.


---> Multimetr DT-830B za darmo! <---
Postaw piwo autorowi tego posta
 
 
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 20-03-2012, 18:31   

Hehe.... no mam AVR Studio od dawna, używam go do programowania.
Wcześniejszy problem okazał się najprawdopodobniej związany z tym, że w pracy nie mam uprawnień admina na komputerze.

Czyli zaczynam w AVR Studio i nie muszę kombinować z żadnymi makefilami, liniami poleceń, zewnętrznym wywoływaniem jakichś linkerów, kompilerów, itp.?

Postaw piwo autorowi tego posta
 
 
dondu 



Posty: 903
Pomógł: 39 razy
Otrzymał 69 piw(a)
Skąd: Gliwice
Programuję w:
C
Wysłany: 20-03-2012, 19:26   

rezolut napisał/a:
Czyli zaczynam w AVR Studio i nie muszę kombinować z żadnymi makefilami, liniami poleceń, zewnętrznym wywoływaniem jakichś linkerów, kompilerów, itp.?

Tak, on to zrobi za Ciebie i zawsze poprawnie :)
No chyba że będziesz chciał ręcznie wtedy wskażesz mu plik makefile.


---> Multimetr DT-830B za darmo! <---
Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
rezolut
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 20-03-2012, 20:14   

AVR Studio wydaje się działać :D

Piszę najprostszą ramę programu:
Kod programu: Zaznacz cały

#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRA |= 1 << PA0;

    for (;;)
    {
        PORTA |= 1 << PA0;
        _delay_ms(100);
        PORTA &= ~(1 << PA0);
        _delay_ms(100);
    }
}

Deklaruję 16MHz, ale po uruchomieniu debuggera, w bocznym panelu mam info: Frequency 4.0000 MHz.
Coś nie tak deklaruję?

[ Dodano: 21-03-2012, 18:40 ]
Ponowię zapytanie bo symulator wypluwa mi coś takiego, choć zegar ustawiam w programie i również w opcjach projektu na 16MHz.



O co chodzi z tym 4MHz?

Postaw piwo autorowi tego posta
 
 
ProeXtreme 




Posty: 396
Pomógł: 6 razy
Otrzymał 22 piw(a)
Skąd: Opole
Programuję w:
BASCOM/C
Należę do:
GROM
Moje roboty:
IzyboT, SzybcioR, Black arroW, Pluton

Wysłany: 23-03-2012, 00:09   

Nie wiem czy to ma jakiś wpływ, ale na załączonym obrazku w miejscu deklaracji częstotliwości kwarcu zjadłeś "L"


GROM - Grupa Robotycznie Opętanych Maniaków
www.roboGROM.pl
Postaw piwo autorowi tego posta
 
 
 
marek1707 



Posty: 1365
Pomógł: 171 razy
Otrzymał 246 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 23-03-2012, 00:25   

A poniżej widzę słynną pętlę for próbującą powtarzać diabelską instukcję powrotu z main :-?

Dla symulatora te 4MHz jest tylko liczbą używaną do przeliczania liczby cykli procesora na czasy pokazywane w us. Szczerze mówiąc nie wiem, czy symbol F_CPU przenosi się do pliku elf tak, by AVR Studio mogło z tego skorzystać i nie mogę tego teraz sprawdzić. Wpisz tam 16 i (na razie) po kłopocie.

Postaw piwo autorowi tego posta
 
 
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 23-03-2012, 08:08   

ProeXtreme, zdaje się, że wpływu nie ma. Deklarowałem UL, samo L, bez niczego i te 4MHz pozostają niezmienione.
marek1707, kod wziąłem byle jaki, byle tylko cokolwiek skompilować i pokazać te 4MHz. Pole to jest nieedytowalne, więc nie wiem, gdzie mam wpisać 16.

Postaw piwo autorowi tego posta
 
 
kling 




Posty: 220
Pomógł: 10 razy
Otrzymał 11 piw(a)
Skąd: Kraków / Łódź
Programuję w:
[C]/[C++]
Należę do:
SKaNeR
Moje roboty:
Chory Pastor/Pan Szpadyzor

Wysłany: 23-03-2012, 11:45   

Kliknij prawym na nazwe projektu w drzewku projektów (po lewej stronie), wybierz 'Edit Configuration Options' i tam wpisz 16000000 w polu Frequency. Powinno pomóc.


nulla dies sine linea
Postaw piwo autorowi tego posta
 
 
 
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 23-03-2012, 12:01   

To też robiłem. Zmieniłem w ustawieniach projektu na 16 000 000 (bo tam w hz każą) i nic to nie zmieniło. W symulatorze po lewej nadal Frequency=4MHz.

Postaw piwo autorowi tego posta
 
 
kling 




Posty: 220
Pomógł: 10 razy
Otrzymał 11 piw(a)
Skąd: Kraków / Łódź
Programuję w:
[C]/[C++]
Należę do:
SKaNeR
Moje roboty:
Chory Pastor/Pan Szpadyzor

Wysłany: 23-03-2012, 12:26   

Może i głupie ale nic innego już nie przychodzi mi do głowy - a fusebity?


nulla dies sine linea
Postaw piwo autorowi tego posta
 
 
 
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 23-03-2012, 23:14   

kling napisał/a:
Kliknij prawym na nazwe projektu w drzewku projektów (po lewej stronie), wybierz 'Edit Configuration Options' i tam wpisz 16000000 w polu Frequency. Powinno pomóc.

Problem rozwiązany - Menu Debug->AVR Simulator Options->Frequency.
Choć nie wiem, co to zmienia :) Chyba tylko obliczanie czasów wykonywania w symulatorze.

[ Dodano: 24-03-2012, 14:09 ]
Skoro AVR Studio zaczęło działać, przystąpiłem do popełniania pierwszego programu.
Kod programu: Zaznacz cały

#define F_CPU 16000000L

#include <avr/io.h>
#include <avr/interrupt.h>
 
#define l_przod
#define l_tyl
#define p_przod
#define p_tyl


int main(void)
{
    //konfiguracja portów
    DDRB = 255;     // wszystko OUT
    DDRC = 255;        // wszystko OUT
    DDRC &= 0xf8;    // zeruje bity 0..2, czyli PD0 - PD2 to IN
    PORTC = 7;        // B00000111 - wejścia PD0-PD2 podciągnięte
    DDRD = 0;        // wszystko IN
    PORTD = 12;        // B00001100 - wejścia PD2, PD3 podciągnięte

    //definicje zmiennych
    int wysokosc


    //konfiguracja PWM
    TCCR1A|=(1<<WGM10)|(1<<COM1A1)|(1<<COM1B1);
    TCCR1B|=(1<<WGM13)|(1<<CS10);
 
    OCR1B=255;
    OCR1A=5;
   
    while(1)
     {
    }
    return 0
}


W międzyczasie usunąłem AVR Studio 4 i zainstalowałem 5.1 - niestety, mój programator AVRprog nie jest w nowym środowisku wykrywany. Wiadomo, lepsze jest wrogiem dobrego. Trzeba było się przesiąść z powrotem na wersję 4.

Wracając do programu. Nauka w moim przypadku musi się odbywać na zasadzie czytania kursów, przykładów i wyłuskiwania konkretnych kodów. Niestety nie mogę przeczytać 2,3 kursów i ruszyć z kopyta "z głowy", gdyż z racji wieku pod koniec strony kursu, zapominam co było na początku :(
Oczywiste jest, że rozpoczynając naukę, próbuję przerabiać działający program, napisany w Bascom, posiłkując się jego strukturą i już zdefiniowanymi portami, zmiennymi, itp.

Tak więc udało mi się (sprawdzone w symulatorze) jakoś skonfigurować porty, ale utknąłem na "powiązaniu" zmiennej z pinem portu. W Bascom korzystałem z kodu:
Kod programu: Zaznacz cały

L_przod Alias Portd.6
L_tyl Alias Portd.7

ale w C zastanawiam się, czy jest sens deklarować zmienną i instrukcji #define, czy chcąc sterować konkretnym bitem portu, nie lepiej robić to bezpośrednio?
Kod programu: Zaznacz cały

PORTD |= (1<<6)

Czy nie jest to optymalniejsze rozwiązanie (z pkt widzenia gospodarki pamięcią i szybkości wykonywania programu)?
Jaki jest w takim wypadku "dobry styl" programowania?

Ostatnio zmieniony przez rezolut 24-03-2012, 14:10, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
bartek1333 



Posty: 349
Pomógł: 15 razy
Otrzymał 22 piw(a)
Skąd: Bolków
Programuję w:
C
Wysłany: 24-03-2012, 14:20   

Jeżeli masz:
Kod programu: Zaznacz cały
#define l_przod PORTD |= (1<<6)

to preprocesor języka C (jeszcze przed kompilacją) zastąpi wszystkie występowania zwrotu: l_przod, wyrażeniem: PORTD |= (1<<6)
Tak więc dyrektywa preprocesora "define" jest ułatwieniem dla programisty i wątpie czy ma to jakieś znaczenie w gospodarce pamięci.


"Wymagajcie od siebie choćby inni od was nie wymagali."
Jan Paweł II
Postaw piwo autorowi tego posta
 
 
 
rezolut 



Posty: 203
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 24-03-2012, 14:30   

W takim razie, poszedłem w złą stronę. Zmienna l_przod ma przyjmować dwie wartości 0/1 a oprócz tego jest bezpośrednio powiązana z portem.
Ale czy muszę ją definiować i przypisywać l_przod = 1, czy da się to załatwić bez definiowania zmiennej?
Wiem, że dzwonią, ale nie wiem w którym kościele.
Czy takie definicje
Kod programu: Zaznacz cały

#define l_przod PORTD |= (1<<6) | (0<<7)
#define l_tyl PORTD |= (0<<6) | (1<<7)

są poprawne i czy potem użycie w kodzie programu l_przod, spowoduje ustawienie 6 bitu i wyzerowanie 7 bitu?

Ostatnio zmieniony przez rezolut 24-03-2012, 14:38, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: [ Bascom] Jak zrobić... Dylemat: jaki język?... Jaki język programow... Mikrokontrolery z ob...
lub przeszukaj forum po wybranych tagach: kroki, pierwsze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Polityka prywatności