Skocz do zawartości

ARM - debugowanie, podgląd funkcji


bridzysta

Pomocna odpowiedź

Siemka 😉!

Chciałbym zobaczyć, jaki będzie wynik funkcji eCompareString. Używałem "Watch 1", ale nwm czy może on sobie poradzić z taką funkcją która zwraca return? W każdym razie mi się to nie udało. Próbowałem też wpisywać samą nazwę funkcji w Command Window, ale to też nic nie dało. Próbowałem szukać odpowiedzi też tutaj Forum Keil, ale nie znalazłem - choć tam też zadałem to pytanie 🙂. Jakby ktoś chciał zaglądnąć to tutaj: Post Keil

Sprzęt - ARM LPC2132

IDE - qVision4 Keil

#include <LPC21xx.H>
#include <string.h>

#define NULL 0

enum CompResult{DIFFERENT, EQUAL};

enum CompResult eCompareString(char pcStr1[], char pcStr2[]){

       unsigned char ucCounter;

       for(ucCounter=0; pcStr1[ucCounter]==pcStr2[ucCounter]; ucCounter++){
               if(pcStr1[ucCounter]==NULL){
                       return EQUAL;
               }
       }
       return DIFFERENT;
}

int main(){

       char pcStr1[] = {'a','b','c', NULL};
       char pcStr2[] = {'d','e','f', NULL};

       eCompareString(pcStr1, pcStr2);

       return 0;
}

Z góry dzięki za odpowiedź 😉!

Link do komentarza
Share on other sites

Gość es2

W kodzie, który pokazałeś nie zobaczysz co zwraca funkcja bo nie zwraca nic. Nie używasz zwracanej wartości więc optymalizator "wywala" fragment odpowiedzialny za to.

Link do komentarza
Share on other sites

Gość es2
es2

Wobec tego co powinienem dopisać w kodzie? Przypisać coś (EQUAL/DIFFERENT) do zmiennej i później w main() ją wywołać ?

Dokładnie. Ponadto jeszcze optymalizator może robić w konia. Jak tylko przypiszesz a dalej zmiennej nie bedziesz używał optymalizator to wywali. Zmienna może też być trzymana w rejestrach.

Przypisuj więc do zmiennej static volatile albo globalnej volatile.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

es2

Napisałem coś takiego dla C - wrzuciłem w internetowy kompilator, jest ok.

#include <stdio.h>
#include <string.h>

#define NULL '\0'

enum CompResult{DIFFERENT, EQUAL};

enum CompResult eCompareString(char pcStr1[], char pcStr2[]){

       unsigned char ucCounter;

       for(ucCounter=0; pcStr1[ucCounter]==pcStr2[ucCounter]; ucCounter++){
               if(pcStr1[ucCounter]==NULL){
                       return EQUAL;
               }
       }
       return DIFFERENT;
}
int main(){

       char pcStr1[] = {'a','b','c', NULL};
       char pcStr2[] = {'a','b','d', NULL};

   printf("Resullt: %d\n", eCompareString(pcStr1, pcStr2));

   return 0;

}

Później napisałem dla C++, działa:

#include <iostream>
using namespace std;

#define NULL 0

enum CompResult{DIFFERENT, EQUAL};

enum CompResult eCompareString(char pcStr1[], char pcStr2[]){

       unsigned char ucCounter;

       for(ucCounter=0; pcStr1[ucCounter]==pcStr2[ucCounter]; ucCounter++){
               if(pcStr1[ucCounter]==NULL){
                       return EQUAL;
               }
       }
       return DIFFERENT;
}
int main(){

   char pcStr1[] = {'a','b','c', NULL};
   char pcStr2[] = {'a','b','d', NULL};

   cout << "Result: " << eCompareString(pcStr1, pcStr2) << endl;

   return 0;

}

A jak wrzucam do Keil'a. To gdy chce debugować (ctrl + F5), to nie mogę tego zrobić dla "main.c" - to się wywala zawsze, gdy używam w Keil'u:

...
#include <stdio.h>
...
printf("...", ...);
...

To co wrzuciłem do Keil'a tutaj:

#include <LPC21xx.H>
#include <stdio.h>
#include <string.h>

#define NULL 0

enum CompResult{DIFFERENT, EQUAL};

enum CompResult eCompareString(char pcStr1[], char pcStr2[]){

       unsigned char ucCounter;

       for(ucCounter=0; pcStr1[ucCounter]==pcStr2[ucCounter]; ucCounter++){
               if(pcStr1[ucCounter]==NULL){
                       return EQUAL;
               }
       }
       return DIFFERENT;
}

int main(){

   char pcSource[] = {'a','b','c', NULL};
   char pcDestination[] = {'d','e','f', NULL};

   CopyString(pcSource, pcDestination);

   printf("Result: %d\n", eCompareString(pcStr1, pcStr2));
Link do komentarza
Share on other sites

Gość es2

Spróbowałbym

char CompResult{DIFFERENT, EQUAL};

Zamiast

enum CompResult{DIFFERENT, EQUAL};

O co chodzi z tym wywalaniem?

to nie mogę tego zrobić dla "main.c" - to się wywala zawsze, gdy używam w Keil'u:
Link do komentarza
Share on other sites

    char CompResult{DIFFERENT, EQUAL};

to jakaś nowa konstrukcja w C?

program się wywala bo printf() nie działa na docelowym urządzeniu. Musisz przekierować wyjście, inaczej program "nie wiem" gdzie miałby te dane wypisać.

Link do komentarza
Share on other sites

Gość es2
    char CompResult{DIFFERENT, EQUAL};

to jakaś nowa konstrukcja w C?

Nie ta linijkę skopiowałem

char CompResult eCompareString(char pcStr1[], char pcStr2[])
Link do komentarza
Share on other sites

ethanak, chodziło mi o to cudo:

char CompResult

Koleś wypisuje że jest mega gwiazdą Elektroniki Praktycznej - a wygląda na to, że nie zna podstaw C. Ale może się mylę, więc delikatnie pytam. Chociaż na szczęście i tak EP od dawna nie kupuję, ale teraz chociaż wiem dlaczego.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.