Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[atmega32][c/eclipse] operacje na liczbach zmiennopozycyjnych

Krejzol_3000 09 Feb 2012 17:06 1223 4
  • #1
    Krejzol_3000
    Level 12  
    Mam problem z przesyłaniem liczb zmiennopozycyjnych przez port RS232.

    kod obsługi uartu jest poprawny, dobrze sprawdza się w innych aplikacjach.
    sklejam i wysyłam zmienne w ten sposób
    
    sprintf(mystr,"\r\n krok %i czas = %d  \ty = %d",n,czas,y[k]);  // sklejanie stringa mystr
    
    uart_puts(mystr); //wysylanie mystr po RS
    


    w terminalu odbieram coś takiego
    
    krok 1 czas wykonania = ? us  	y = ? 
    


    wyczytałem, że aby były wyświetlane odpowiednie wartości a nie znaki zapytania należy zlinkować biblioteki libm.a i libprintf_flt.a, niestety nigdy nie robiłem tego w Eclipse, wydaje mi się że zrobiłem to dobrze, ale nie jestem pewien,
    oto podgląd wygenerowanego automatycznie przez Eclipse mfile
    czy ww. biblioteki są poprawnie zlinkowane? Jeżeli nie proszę o podpowiedź co należy zmienić.

    
    -include ../makefile.init
    
    RM := rm -rf
    
    # All of the sources participating in the build are defined here
    -include sources.mk
    -include subdir.mk
    -include objects.mk
    
    ifneq ($(MAKECMDGOALS),clean)
    ifneq ($(strip $(C_DEPS)),)
    -include $(C_DEPS)
    endif
    ifneq ($(strip $(ASM_DEPS)),)
    -include $(ASM_DEPS)
    endif
    ifneq ($(strip $(S_DEPS)),)
    -include $(S_DEPS)
    endif
    ifneq ($(strip $(S_UPPER_DEPS)),)
    -include $(S_UPPER_DEPS)
    endif
    endif
    
    -include ../makefile.defs
    
    # Add inputs and outputs from these tool invocations to the build variables 
    LSS += \
    platforma.lss \
    
    FLASH_IMAGE += \
    platforma.hex \
    
    EEPROM_IMAGE += \
    platforma.eep \
    
    SIZEDUMMY += \
    sizedummy \
    
    
    # All Target
    all: platforma.elf secondary-outputs
    
    # Tool invocations
    platforma.elf: $(OBJS) $(USER_OBJS)
    	@echo 'Building target: $@'
    	@echo 'Invoking: AVR C Linker'
    	avr-gcc -Wl,-Map,platforma.map -Llibm.a -Llibprintf_flt.a -mmcu=atmega32 -o"platforma.elf" $(OBJS) $(USER_OBJS) $(LIBS)
    	@echo 'Finished building target: $@'
    	@echo ' '
    
    platforma.lss: platforma.elf
    	@echo 'Invoking: AVR Create Extended Listing'
    	-avr-objdump -h -S platforma.elf  >"platforma.lss"
    	@echo 'Finished building: $@'
    	@echo ' '
    
    platforma.hex: platforma.elf
    	@echo 'Create Flash image (ihex format)'
    	-avr-objcopy -R .eeprom -O ihex platforma.elf  "platforma.hex"
    	@echo 'Finished building: $@'
    	@echo ' '
    
    platforma.eep: platforma.elf
    	@echo 'Create eeprom image (ihex format)'
    	-avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex platforma.elf  "platforma.eep"
    	@echo 'Finished building: $@'
    	@echo ' '
    
    sizedummy: platforma.elf
    	@echo 'Invoking: Print Size'
    	-avr-size --format=avr --mcu=atmega32 platforma.elf
    	@echo 'Finished building: $@'
    	@echo ' '
    
    # Other Targets
    clean:
    	-$(RM) $(OBJS)$(C_DEPS)$(ASM_DEPS)$(EEPROM_IMAGE)$(FLASH_IMAGE)$(ELFS)$(LSS)$(S_DEPS)$(SIZEDUMMY)$(S_UPPER_DEPS) platforma.elf
    	-@echo ' '
    
    secondary-outputs: $(LSS) $(FLASH_IMAGE) $(EEPROM_IMAGE) $(SIZEDUMMY)
    
    .PHONY: all clean dependents
    .SECONDARY:
    efile.targets
    
    -include ../mak
    


    a może przyczyna tkwi gdzie indziej, proszę o poradę gdyż spędziłem już nad tym dość dużo czasu.
  • Helpful post
    #2
    tmf
    Moderator of Microcontroller designs
    Oprócz zlinkowania odpowiednich bibliotek, trzeba jeszcze przekazać info gdzie ma szukać odpowiednich symboli. W necie masz pełno info na temat jak to zrobić. To czy finalnie wszystko zostało zlinkowane jak należy sprawdzisz w pliku map i dokładnie w lss.
  • #3
    Krejzol_3000
    Level 12  
    w załączniku dodałem plik map jako *.txt, jeżeli ktoś mógłby mi sprawdzić czy jest on poprawnie zlinkowany to byłbym naprawdę wdzięczny, a tymczasem przeczytam rozdział w książce tmf na temat float, bo patrze że tam są opisane operacje na liczbach zmiennopozycyjnych, nie zauważyłem wcześniej tego paragrafu.
  • Helpful post
    #4
    kiziu13
    Level 17  
    Dodatkowo, przy wysyłaniu floatów, w printfie powinno być %f, a nie %d.
  • #5
    Krejzol_3000
    Level 12  
    Zmienne tak naprawdę są zadeklarowane jako double stąd ten zapis %d, zmieniałem również na float, niestety nie pomagało.

    edit:
    Nie dopatrzyłem się, że do double powinno być %e, intuicyjnie zrobiłem na %d.

    Po wielu próbach z linkowaniem z powodu braku czasu przesiadam się do AVR Studio, bo wiem jak tam zmienić opcje linkowania.

    edit:
    w AVR Studio zrobione, niestety nie wiem jak to zrobić w Eclipse