-
Thread
Konzept Interrupts und Klassen
eines Cortex-M läuft und "fast" keine Unterstützung zur Laufzeit braucht: https://github.com/korken89/crect Das klingt sehr spannend, finde ich :-)
EXTI_ClearITPendingBit(EXTI_Line1); } }[/c] Ohne den Aufruf von testIntFun(): [c] text data bss dec 3932 1092 1108 6132 [/c] Mit dem Aufruf von testIntFun(): [c] text data bss dec 73124 2536 1384 77044 [/c] Ich benutze Eclipse CDT mit AC6 Plugin
-
Thread
mbed - oder es muss nicht immer Arduino sein
mbed-os-example-blinky +------------------+-------+-------+------+ | Module | .text | .data | .bss | +------------------+-------+-------+------+ | [fill] | 612 | 4 | 17 | | [lib]\c.a | 17139 | 2472 | 89 | | [lib]\gcc.a | 3892 | 0 | 0 | | [lib]\misc
39372 | 2928 | 6564 | +------------------+-------+-------+------+ Total Static RAM memory (data + bss): 9492 bytes Total Flash memory (text + data): 42300 bytes Image: .\BUILD\ARCH_PRO\GCC_ARM\mbed-os-example-blinky.bin C:\Users\Checker\mbed-os-example-blinky> *.bin Datei auf Arch Pro Board
-
Thread
Antennenanalysator nach EU1KY
283240309675?_trkparms=aid%3D111001%26algo%3DREC.SEED%26ao%3D1%26asc%3D20170511121231%26meid%3D26ebc280e89e4a5a979e4c1ac2516aac%26pid%3D100675%26rk%3D2%26rkt%3D15%26sd%3D254042872009%26itm%3D283240309675&_trksid=p2481888.c100675.m4236&_trkparms=pageci%3A53bb6f9d-0b51-11e9-bfef-74dbd180e472%7Cparentrq%3Af96d5e3b1670aa66d3e1b1d9fff543c7%
Compilieren hat X CPU Anz.+1) Erfolgreicher make Durchlauf sieht dann so aus: text data bss dec hex filename 391632 1224 4912328 5305184 50f360 ./bin/release/AAFW.elf READY ==> FW binary created ./bin/release/AAFW_2019MMDD_hhmmss.bin Die FW kann dann mit st-flash
-
Thread
C Anfängerfrage (static innerhalb einer Funktion)
Werte zur Laufzeit ändern konnten. Der GCC hat von der Tabelle eine Kopie ins Flash gelinkt und im BSS Segment entsprechend Speicher alloziert. Beim ersten Aufruf hat er dann per memcpy aus dem Flash in das BSS kopiert. Mit entsprechendem Mutex versteht sich. Ich habe lediglich die Deklaration der
Und dabei ist es egal, ob mit 0 > oder einem anderen Wert. 0-Initialisierte Variablen landen im .bss Segment und werden mit einer dedizierten Schleife im Startup-Code initialisiert. So vermeidet man große 0-Blöcke im Flash-Image. Das ganze ist natürlich aus C-Sicht unsichtbar und wird durch die Laufzeitumgebung
-
Thread
AVR GPIOR Bit Verwaltung C++
12> size=1 align=1 base size=0 base align=1[/pre] asm: [pre].global pad12 .section .bss .type pad12, @object .size pad12, 1 pad12: .zero 1[/pre] Die "portList" wird für große Devices "etwas" unübersichtlich, da wäre eine Lösung mit Portname wie "PortD+Pad1" oder "PortD1
PinDefinition::OutputPin<arduinoPin>::set(bool) [with unsigned char arduinoPin = 12]' PinDefinition.h:89:31: warning: conversion from 'int' to 'PinDefinition::byte {aka unsigned char}' may change value [-Wconversion] *getOutPort(arduinoPin) &= ~getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~
-
Thread
Alternativen zu C, C++ auf ARM cortex M?
thread2(void) { print (b); print (a); }[/c] wird zu [code]0000000000000000 <print>: 0: 89 fa mov %edi,%edx 2: be 00 00 00 00 mov $0x0,%esi 7: bf 01 00 00 00 mov $0x1,%edi c: 31 c0 xor %eax,%eax e: e9 00 00 00
arm-elf-linux-bin/share/examples/gnat-cross/led_flasher-stm32f4 ist ein Beispiel: [code] text data bss dec hex filename 56860 3652 30504 91016 16388 obj/led_flasher [/code] Ich glaub das ist ein neure Weltrekord! led_flasher läßt 2 LEDs blinken und fragt einen Taster ab. Mit
-
Thread
Wärmezähler über optische M-Bus-Schnittstelle auslesen
1,0406ssSSssSSs@1000,Wärmenergie gesamt,MWh,W_total,3 1,0413ssSSssSSs@1000,Volumen gesamt,m³,V_total,3 1,042BssSSssSSs@1000,Strom aktuell,kW,P_curr,3 1,043BssSSssSSs@1,Durchfluss aktuell,l/h,F_curr,0 1,025BssSS@1,Temperatur Vorlauf,°C,T_flow,0 1,025FssSS@1,Temperatur Rücklauf,°C,T_return,0 1,0261ssSS@100,
1,0406ssSSssSSs@1000,Wärmenergie gesamt,MWh,W_total,3 1,0413ssSSssSSs@1000,Volumen gesamt,m³,V_total,3 1,042BssSSssSSs@1000,Strom aktuell,kW,P_curr,3 1,043BssSSssSSs@1000,Durchfluss aktuell,m³/h,F_curr,3 1,025BssSS@1,Temperatur Vorlauf,°C,T_flow,0 1,025FssSS@1,Temperatur Rücklauf,°C,T_return,0 1,0261ssSS@
-
Thread
Wann sperrt ein selbstleit. N-Kanal MOSFET?
/www.mouser.de/Search/m_ProductDetail.aspx?IXYS%2fIXTT16N10D2%2f&qs=%2fha2pyFaduj5N6t4pCyXPayOPT6ON89CdpamK40IDeE%3d Wie gesagt: natürlich gibt es solche Bauteile, aber ich würde mir das zweimal überlegen, vor ich sowas einsetze. Da könnte ich mir genauso gut eine Lösung mit einem Logiclevel Mosfet
Einschalten oder Kurzschluss) für DC/DC-Wandler-Module gebaut. Ich verwende für Messkreise den BSS169 als strombegrenzendes Element im Überspannungsschutz zwischen Sensor und Messverstärker. Die Ursprungsidee dazu stammt von http://www.Elektronik-Kompendium.de Gute Infos und Beschreibung zur
-
Thread
NiMH Akku mit Solarzelle laden
Steven J. schrieb im Beitrag #5090821: > Ist meine Schaltung so funktionsfähig? Im Datenblatt vom BSS83 steht nichts davon, dass der sich bei 1V Ugs sicher einschalten lässt.
Beitrag #5090821: > Die zwei antiparallelen MOSFET's schalten den Ladestrom der Solarzelle. Dein BSS83 ist zufällig einer der wenigen MOSFETs mit herausgeführtem Bulk, der keine parasitäre Diode hat, die in diesem Fall stört, also reicht von ihm einer. ABER: Der BSS38 braucht zumindest -3.2V bis
-
Thread
STM32 Arduino
abverkauft sind. Oder die Kiste mit den 10k 0602 in Shenzhen aufgebraucht ist. Bei einem Board für €1,89 mit einem Chip, der normalerweise €2,67/1000Stk. kostet, kann/muß man mit sowas leben :-)
Hier die Ergebnisse für die reine fft-Funktion ohne Arduino-Umgebung: [pre] text data bss dec hex filename 500 256 0 756 2f4 fft-arm-16.o 416 512 0 928 3a0 fft-arm-32.o 998 256 0 1254 4e6 fft-avr
-
Thread
AtMega16 Timer Problem
; 0x6a <.do_clear_bss_start> 00000068 <.do_clear_bss_loop>: 68: 1d 92 st X+, r1 0000006a <.do_clear_bss_start>: 6a: a2 36 cpi r26, 0x62 ; 98 6c: b1 07 cpc r27, r17 6e: e1 f7 brne .-8 ; 0x68 <.do_clear_bss_loop> 70: 0e 94 5b 00 call 0xb6 ; 0xb6 <main> 74: 0c 94 7e 00 jmp 0xfc ; 0xfc <_exit> 00000078 <__bad_interrupt>: 78: 0c 94 00 00 jmp 0 ; 0x0 <__
-
Thread
Horizon EDA [War: Neues, halbfertiges Elektronik-CAD-Programm]
Ach so... [code] $ size ../horizon/horizon-prj-mgr text data bss dec hex filename 2624115 9736 11344 2645195 285ccb ../horizon/horizon-prj-mgr stefan@nuc ~/pet $ size ../horizon/horizon-imp text data bss dec hex filename
#6260612: > Es gibt z.B. 790x, die ein verdrehtes Pinning beim TO220 haben. Es gibt auch 78L05 in SOT-89 mit zwei verschiedenen Pinnings. Da bin ich mal auf die harte Tour bei BAE drüber gestolpert. :/
-
Thread
Was sind eure Lieblings-ICs?
Noch ein paar andere Liblinge: MSP5.0A / MSP3V3 - Supressordioden, die kommen überall mit drauf. BSS84 / BSS123 - Logic Level Mosfets BTS432 / BTS555 - Hi Side Switch
Programmroutinen geschrieben hatte (die portiert auch heute noch in einigen AVRs ihren Dienst tun) AT89C2051 --------- - weil mit diesem ohne EProm, Latch und Bus-Dekoder kleine programmierbare Schaltungen realisiert werden konnten CH340G ------ - weil mit diesem extrem preiswerten China-Chip unter
-
Thread
Init-Funktion oder if-statement mit static variable
Achim S. schrieb im Beitrag #4878451: > C89 oder C99 kennt bool aber nicht. Schon mal was von stdbool.h gehoert?
Kaj schrieb im Beitrag #4878472: > Achim S. schrieb im Beitrag #4878451: >> C89 oder C99 kennt bool aber nicht. > Schon mal was von stdbool.h gehoert? Man, steht doch genau ein Betrag vor Dir ...
-
Thread
SSD1306/1309 Library zum Darstellen von Text auf OLED Displays
oder -std=gnu99. Ist eigentlich unverständlich, warum der Default beim GCC nach wie vor -std=gnu89 ist.
30.720 Bytes) dvanced_OK.cpp.elf" text data bss dec hex 6070 224 543 6837 1ab5
-
Thread
Zusicherung der initialisierung von globalen Variablen in C und C++
garantiert mir > der C-Standard, dass globale Variablen immer mit 0 initialisiert werden, Korrekt. C89, 6.5.7 Initialization: If an object that has automatic storage duration is not initialized explicitely, its value is indeterminate. If an object that has static storage duration is not initialized
Variable mit 0 initialisierst. Die legt er dann nämlich nicht etwa in die Data-Sektion, sondern in die Bss-Sektion. Das kann man mit dem Mapfile auch leicht nachweisen. Das spart Platz im ROM, deswegen macht GCC das so. Mit anderen Worten, GCC verläßt sich darauf, daß die Bss-Sektion so genullt wird,
-
Thread
Programm größer als RAM-Größe
lange Zeit gesträubt, auch Flash zu verwenden. Deren Flash 8051 heißen jetzt XC800. Z.B. Atmels AT89C51 mit Flash ist von 1993.
in das RAM kopiert werden. text und data zusammen machen sozusagen deine Programmgröße aus. bss sind nicht initialisierte Variablen oder meisten einfach mit 0 initialisierte Variablen und müssen im RAM stehen. Beim Reset ladet die CPU den Befehl von einer bestimmten Addresse(Resetaddresse)
-
Thread
ELF File Offset für Sektionen
CONTENTS, READONLY, DEBUGGING 15 .debug_info 00035c10 00000000 00000000 0001e89f 2**0 CONTENTS, READONLY, DEBUGGING 16 .debug_abbrev 000079e7 00000000 00000000 000544af 2**0 CONTENTS, READONLY, DEBUGGING 17 .debug_line 0001dd3c 00000000
00000028 00000630 00 WA 00 000 3 .data [ 11] NOBITS 00000658 00001048 00 WA 00 000 3 .bss [ 12] NOBITS 000016a0 0000d960 00 WA 00 000 1 .heap [ 13] PROGBITS 00000000 00000030 01 00 000 1 .comment [ 14] PROGBITS 00000000 00001a08 00 00 000
-
Thread
AVRGCC C++ undefined reference to Max7456::Max7456()
, enclose it in quotes. EXTRAINCDIRS = # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions # c99 = ISO C99 standard (not yet fully implemented) # gnu99 = c99 plus GCC extensions CSTANDARD = -std=gnu99 # Place -D or -U options
# 64 KB of external RAM, starting after internal RAM (ATmega128!), # used for variables (.data/.bss) and heap (malloc()). #EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff # 64 KB of external RAM, starting after internal RAM (ATmega128!), # only used for heap (malloc
-
Thread
AVR Einstieg
ohne wenn man > händisch einfach z.B. beim Cortex M folgendes macht: Davon hast du .data und .bss nicht initialisiert.
for(dst = &__data_start; dst < &_edata; ) { *dst++ = *src++; } for(dst = &__bss_start__; dst < &__bss_end__; ) { *dst++ = 0; } count = __init_array_end - __init_array_start; for (i = 0; i < count; i++) __init_array_start[i] ();
-
Thread
Analog Digital Umwandlung, einstiegs Code.
must be seperated by a space. EXTRAINCDIRS = # Compiler flag to set the C Standard level. # c89 - "ANSI" C # gnu89 - c89 plus GCC extensions # c99 - ISO C99 standard (not yet fully implemented) # gnu99 - c99 plus GCC extensions CSTANDARD = -std=gnu99 # Place -D or -U options here CDEFS
# 64 KB of external RAM, starting after internal RAM (ATmega128!), # used for variables (.data/.bss) and heap (malloc()). #EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff # 64 KB of external RAM, starting after internal RAM (ATmega128!), # only used for heap (malloc()). #EXTMEMOPTS
-
Thread
WordClock mit WS2812
SCP@<e6><ef>ZTWZ<b5><c4> <82><b4><c5><11>dD<f5><e3>R`\<89>dH<8a>`H<84><d6><9c><85>IB`Fh<d7><e5><a0><96>@G <f1><da>\<e5><a0><14><c4><86><d5><f6><df><85>H<b8><a2>T<d1>&<ea>`\<a9><14><c4>_<
IRF9310 MOSFET und die Zusatzbeschaltung hergestellt (eher schnell als schön). Statt des BS170 wurde ein BSS123 verwendet. Mit auf der Platine ist auch eine (optionale) Schottky-Diode – geschaltet zwischen WS2812-Daten und geschalteter Versorgungsspannung. Bei den Anschlüssen dafür (1x Schraubklemme, 1x
-
Thread
ATMega128A, mehrer getestet PD0 und PD 1 gehen nicht
, enclose it in quotes. EXTRAINCDIRS = # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions # c99 = ISO C99 standard (not yet fully implemented) # gnu99 = c99 plus GCC extensions CSTANDARD = -std=gnu99 # Place -D or -U options
COFFCONVERT += --change-section-address .data-0x800000 COFFCONVERT += --change-section-address .bss-0x800000 COFFCONVERT += --change-section-address .noinit-0x800000 COFFCONVERT += --change-section-address .eeprom-0x810000 coff: $(TARGET).elf @echo @echo $(MSG_COFF) $(TARGET).cof
-
Artikel
Beispiel Makefile
that has spaces, enclose it in quotes. EXTRAINCDIRS = Compiler flag to set the C Standard level. c89 = "ANSI" C gnu89 = c89 plus GCC extensions c99 = ISO C99 standard (not yet fully implemented) gnu99 = c99 plus GCC extensions CSTANDARD = -std=gnu99 Place -D or -U options here for C sources CDEFS =
------ 64 KB of external RAM, starting after internal RAM (ATmega128!), used for variables (.data/.bss) and heap (malloc()). EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff 64 KB of external RAM, starting after internal RAM (ATmega128!), only used for heap (malloc()). EXTMEMOPTS = -Wl,-
-
Thread
Assembler wieder auf dem Weg nach vorn Gesperrt
fast 1:1 in Assembler umwandeln. Vollkommen richtig. Hinzu kommt allerdings noch der Code für die BSS- und Stack-Initialisierung, der bei solchen Miniprogrammen oft gar nicht erforderlich ist, sich aber trotzdem in der Codegröße niederschlägt. Natürlich stören diese zusätzlichen ca. 20 Byte außer
Korrigierte Aufgabenstellung für Moby: [c] void main(){ uint8_t threshold = 89; uint8_t value_ptr = 0; uint8_t last_values[8] = {0, 0, 0, 0, 0, 0, 0, 0}; ADC_CONFIG |= (1 << ADC_ON); UART_CONFIG = ...; // set some bits here while(true){ if(ADC_STATUS
-
Thread
Hex.file erstellen
= $(CAT_LIB_PATH) $(CAT_LIB_PATH_OTHERS) # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions # c99 = ISO C99 standard (not yet fully implemented) # gnu99 = c99 plus GCC extensions CSTANDARD = -std=gnu99 # Place -D or -U options
COFFCONVERT += --change-section-address .data-0x800000 COFFCONVERT += --change-section-address .bss-0x800000 COFFCONVERT += --change-section-address .noinit-0x800000 COFFCONVERT += --change-section-address .eeprom-0x810000 coff: $(TARGET).elf @echo @echo $(MSG_COFF) $(TARGET).cof
-
Thread
C versus Assembler->Performance Gesperrt
ret .size SysTick_Handler, .-SysTick_Handler .ident "GCC: (GNU) 4.8.1" .global __do_clear_bss [/avrasm]
u8Idx != u8Max ) 78: c8 30 cpi r28, 0x08 ; 8 7a: d1 05 cpc r29, r1 7c: 89 f7 brne .-30 ; 0x60 <__SREG__+0x21> (*pfct) (); } } //--------------------------------------------------------- return; } 7e: df 91 pop r29 80: cf
-
Thread
Variablen mit 0 initialisieren
3 Taktzyklen beim Programmstart einsparen") aufgeben. Die Entscheidung, welche Variablen nun im BSS-, DATA- oder CODE-Segment landen, überlasse ich dem Compiler - aktuelle bekommen es optimal hin und bei denen, die das nicht optimieren, so what? In 99.99% der Fälle ist es eh vollkommen schnuppe.
Standardbibliothek ist noch was anderes als die komplette Unterstützung der C99-Syntaxerweiterungen (gegenüber C89).
-
Thread
HighSide Switch und Arduino Due
spess53 schrieb im Beitrag #4189607: > Im Datenblatt wird ein BSS100 verwendet. Der Type ist unkritisch, solange er bei 3,3V genug öffnet. Und selten geworden ist er, der BSS100
Infineon-Chip, sollte aber ja ähnlich funktionieren. Allerdings wurden da keine Widerstände um den BSS123 verwendet. Ich könnte mir einen 10k als Gate-Widerstand am BSS123 vorstellen, aber wo soll ich denn den 2. hin bauen?
-
Thread
AVR unter Mint programmieren?
Wahrscheinlich gibt es für beides gute Argumente -std=gnu99 - moderner C-Dialekt (der Standard ist sonst C89, viele Sachen gibts da nicht, z.B. Variablen direkt in for-Schleifen deklarieren). -Os - Optimieren auf Codegröße. Für AVR mit relativ wenig Flash meist am sinnvollsten. Optimizer ist Pflicht u.a.
Funktion column -t -s ' :' *.su | sort -n -k 5 # Größe nach Section avr-objdump -hw -j.text -j.bss -j.data main.elf | tail -n +5 # Codegröße nach Funktion avr-nm --print-size --size-sort main.elf [/code]
-
Thread
C Compiler für Z80?
C-Compiler von 1985 wirklich verwenden will? Der kennt prinzipbedingt nur das grausliche "K&R"-C *vor* C89, das keine Funktionsprototypen und also auch so gut wie keine Typüberprüfungen kennt ... Brr. Ich denke, daß da SDCC eindeutig zu bevorzugen sein sollte.
Stackpointer setzen - ggf. systemspezifische Initialisierungen - ggf. data vom ROM in den RAM kopieren - bss löschen - main anspringen
-
Thread
flash-Fehler mit ATtiny2313, compile ok
12a: 3c 85 ldd r19, Y+12 ; 0x0c 12c: 8b 89 ldd r24, Y+19 ; 0x13 12e: 9c 89 ldd r25, Y+20 ; 0x14 130: 28 1b sub r18, r24 132: 39 0b sbc r19, r25 134: 3c 87
b8 01 movw r22, r16 228: e3 d0 rcall .+454 ; 0x3f0 22a: 89 85 ldd r24, Y+9 ; 0x09 22c: 82 30 cpi r24, 0x02 ; 2 22e: 38 f0 brcs .+14 ; 0x23e 230: 89 89 ldd r24, Y+17
-
Thread
Kleines Simulink-Modell auf µC flashen
bytes (8.1% Full) (.text + .data + .bootloader) Data: 294 bytes (7.2% Full) (.data + .bss + .noinit)
Beispiel der Ausgabe: AVR Memory Usage ---------------- Device: atmega328p Program: 29290 bytes (89.4% Full) (.text + .data + .bootloader) Data: 1643 bytes (80.2% Full) (.data + .bss + .noinit)