From 6655d011025b8ab2d17e047b6d25f61e1cab8c30 Mon Sep 17 00:00:00 2001 From: S170H <64917343+S170H@users.noreply.github.com> Date: Sat, 20 Jan 2024 22:27:43 +0100 Subject: [PATCH] P5 initial --- Abgaben/Hazinedar_3108590_ARBKVS_4.zip | Bin 0 -> 2319 bytes Abgaben/P4/keys.c | 34 ++ Abgaben/P4/keys.h | 12 + Abgaben/P4/main.c | 12 + Abgaben/P4/sevenseg.c | 71 +++ Abgaben/P4/sevenseg.h | 12 + P4/.vs/P4/v14/.atsuo | Bin 36864 -> 48640 bytes P4/P4/Debug/P4.elf | Bin 11680 -> 12196 bytes P4/P4/Debug/P4.hex | 83 +-- P4/P4/Debug/P4.lss | 675 +++++++++++++++---------- P4/P4/Debug/P4.map | 140 ++--- P4/P4/Debug/P4.srec | 83 +-- P4/P4/Debug/keys.o | Bin 2852 -> 3800 bytes P4/P4/Debug/main.o | Bin 4560 -> 2924 bytes P4/P4/Debug/sevenseg.d | 3 + P4/P4/Debug/sevenseg.o | Bin 5224 -> 8092 bytes P4/P4/keys.c | 48 +- P4/P4/keys.h | 2 + P4/P4/main.c | 17 +- P4/P4/sevenseg.c | 46 +- P4/P4/sevenseg.h | 5 +- P5/.vscode/c_cpp_properties.json | 18 + P5/.vscode/launch.json | 15 + P5/.vscode/settings.json | 115 +++++ P5/Main.cpp | 142 ++++++ P5/Semaphore.h | 52 ++ 26 files changed, 1132 insertions(+), 453 deletions(-) create mode 100644 Abgaben/Hazinedar_3108590_ARBKVS_4.zip create mode 100644 Abgaben/P4/keys.c create mode 100644 Abgaben/P4/keys.h create mode 100644 Abgaben/P4/main.c create mode 100644 Abgaben/P4/sevenseg.c create mode 100644 Abgaben/P4/sevenseg.h create mode 100644 P5/.vscode/c_cpp_properties.json create mode 100644 P5/.vscode/launch.json create mode 100644 P5/.vscode/settings.json create mode 100644 P5/Main.cpp create mode 100644 P5/Semaphore.h diff --git a/Abgaben/Hazinedar_3108590_ARBKVS_4.zip b/Abgaben/Hazinedar_3108590_ARBKVS_4.zip new file mode 100644 index 0000000000000000000000000000000000000000..2df609fec2eff5ab9cb17c4cf74687f36af21333 GIT binary patch literal 2319 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 D6) as output + // PORTD = 0xff; // setting bit for 7-segment show 0 + // => spielt keine Rolle, wird von der while Schleife �bernommen + + DDRB = 0x01; // Data direction register B (B0) as output and DDRB (B1, B2) as input + PORTB |= (1 << PINB1) | (1 << PINB2) ; // setting bit for teens B0=0 and SW1-2 + // PINB=0 => start with LED3 (Einer) + + // mit unserem Atmega nicht m�glich, da keine PCINT8_vect und PCINT9_vect vorhanden + // DDRC = 0x00; // Data direction register C as input for SW1 and SW2 + // PORTC |= (1< PINC0 and SW2 -> PINC1 + + cli(); // clear global interrupt flag: interrupts will be immediately disabled + PCICR |= 0x01; // Pin Change Interrupt Control Register: turn on PortB + PCMSK0 |= (1 << PINB1) | (1 << PINB2); // trigger interrupt when SW1 or SW2 is pressed + sei(); // set global interrupt enable + +} + +void init(){ + setupTimer0(); + setupRegisters(); +} \ No newline at end of file diff --git a/Abgaben/P4/keys.h b/Abgaben/P4/keys.h new file mode 100644 index 0000000..89122b7 --- /dev/null +++ b/Abgaben/P4/keys.h @@ -0,0 +1,12 @@ +#ifndef KEYS_H_ +#define KEYS_H_ + +#include +#include + +void setupTimer0(); +void setupRegisters(); +void init(); + + +#endif /* KEYS_H_ */ \ No newline at end of file diff --git a/Abgaben/P4/main.c b/Abgaben/P4/main.c new file mode 100644 index 0000000..e150c74 --- /dev/null +++ b/Abgaben/P4/main.c @@ -0,0 +1,12 @@ +#include "keys.h" +#include "sevenseg.h" + +int main(void) { + init(); + + while(1) { + display(); + } +} + + diff --git a/Abgaben/P4/sevenseg.c b/Abgaben/P4/sevenseg.c new file mode 100644 index 0000000..1728c2f --- /dev/null +++ b/Abgaben/P4/sevenseg.c @@ -0,0 +1,71 @@ +#include "sevenseg.h" + +//-Timer--------------------------------------- + +volatile uint32_t systemClock = 0; + +ISR(TIMER0_COMPA_vect) { + systemClock++; +} + +uint32_t getSystemClock(){ + return systemClock; +} + +void waitFor(uint32_t ms) { + uint32_t endTime = getSystemClock() + ms; + while (getSystemClock() != endTime); +} + +//-Counter------------------------------------- + +volatile int count = 0; + +ISR(PCINT0_vect) { // every 10ms interrupt is triggered + + if (!(PINB & (1< sw1 is pressed + if (count == 0) count = 100; // 100 - 1 = 99 + count--; + } + + if (!(PINB & (1< sw2 is pressed + if (count == 99) count = -1; // -1 + 1 = 0 + count++; + } +} + +//-Display-------------------------------------- + +void display() { + /* + logical 0: on + logical 1: off + + .gfe dcba HEX int + 0 : 1100 0000 = C0 192 + 1 : 1111 1001 = F9 249 + 2 : 1010 0100 = A4 164 + 3 : 1011 0000 = 30 48 + 4 : 1001 1001 = 99 153 + 5 : 1001 0010 = 92 146 + 6 : 1000 0010 = 82 130 + 7 : 1111 1000 = F8 248 + 8 : 1000 0000 = 80 128 + 9 : 1001 0000 = 90 144 + */ + + int numbersAsSegments[10] = { 192, 249, 164, 48, 153, 146, 130, 248, 128, 144 }; // display number from 0 to 9; + + volatile int led_Einer = numbersAsSegments[(int) count % 10]; // Segmentanzeige für Zehner + volatile int led_Zehner = numbersAsSegments[(int) (count - (count % 10)) / 10]; // Segmentanzeige für Einer + + PORTD = led_Einer; + //_delay_ms(10); + waitFor(10); + PORTB ^= (1 << PINB0); + + PORTD = led_Zehner; + //_delay_ms(10); + waitFor(10); + PORTB ^= (1 << PINB0); +} diff --git a/Abgaben/P4/sevenseg.h b/Abgaben/P4/sevenseg.h new file mode 100644 index 0000000..4645d8c --- /dev/null +++ b/Abgaben/P4/sevenseg.h @@ -0,0 +1,12 @@ +#ifndef SEVENSEG_H_ +#define SEVENSEG_H_ +#define F_CPU 16000000UL // 16MHz clock frequency +#include +#include +#include "avr/io.h" + +uint32_t getSystemClock(); +void waitFor(uint32_t ms); +void display(); + +#endif /* SEVENSEG_H_ */ \ No newline at end of file diff --git a/P4/.vs/P4/v14/.atsuo b/P4/.vs/P4/v14/.atsuo index 252e4204bdfb19e12626d4675bc4c988706b82d6..115598750929adc9059da88d3367361b7cb19768 100644 GIT binary patch delta 4043 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 T7yQ!q-SXeVtze>MvCB diff --git a/P4/P4/Debug/P4.elf b/P4/P4/Debug/P4.elf index a54ca9210a1f6ee6890e42298f4fb81ee5efe0df..199d3d3a657b11e9ad66648a9a9e6b6fe5508d0a 100644 GIT binary patch delta 4188 zcma)9Yiv}<6`q;9ci+DIve!1m*~RM^lU)`&p^X9&U`SG+$qz`QCQVi2fWc09$u^<5 zEo%c-F^}NuSwmy9b_oqp3eBZe`5s>ZYv57?I8x6Ce&60cN~g$xFc!xk+Txd(f9c zPeg-sMSU(;n3+b!&@#E3Repkcw{&4FB#Z2c=1NJ zS&G!l`2B_Y!U=BVSMghNktoaU-@bEu0lF*D6>Tj2VLpH2vw?THg>Lf8q0vN7p}(*r z^jhMh(7zJhJ!a1R^@6kx1XL9d}U45_Y9IvUETy~;$ z_uWh<41ZvrH4|9ko|~R*{5s2f&aJ=gJ7?s3vk0^b!r>MUJybx3z^U;EH0Jh@YMNKErv*(8{X`_1l=a36_ zkaFSYAr2nFqh8+e#dD{@X(>F!#+hWry(a-<_8$i4dM2kjkZ>RWHwedU^GC)yuON zFP(ewmITVM`=n47Eg zX$isyuoVG_G(YDH5@J*ZZ8y3TUv{ztvF8gzo#^gJR6*MBYjTeJ!f zr`&1#X>d1xhoph867cL)LhGTH=jA^mb%>M0R*v;ACBsr6->MEM$S=5D@)eS|O5P^9 zUq>1|tmMliZ;{;61}OFu@cTN5hZSrE`%QuoG)5))Rq(CA)QbZ&Pf!((PbR_ppxmEG zdI%=|vy|7v#EKo}K-h2F8X|Dj>wxo|oL zrwBcK)ZPt$N8~8UV##Kz{F9TfhduF@}ZkA|uU)+2k$ zUzFAH!EexfE zGr74nMt*LXK%_CTs%_F{%r52B-myP1u;8p zpb?X|fs2^kHqePtU57yUAkon@NaCVigj5jYwt+?r{SZ(S6BD$7PK*H(Y==&7I`zR< zsepJK0*%;2%|}EnR~*FOVUDY`c-tXEs;{aKEs=;4Bzj-ShD2g$QDU0NT?4j;P*?e9 z4t$gp=tpY^l}Hh}*wxW<02K~>0od=r^qZwP$o?~cj6?6^OpZ=!s1}gbK^I1Hk0MX% zeHvku;u+wqCKp%F5_2^reO7&HDE*ct5-@C005 zG{RWgC%{yZ^Rg`UYHmKz9B3%=dR2!WGK8gzZBbZ3mDkI_#lJCh^3g9Cx)!OgB8dD$ zhdpI>445{zxXuyq2d!|7^k)Qhk=>P)dIkpSxPcKRbP3qGlpDaE(8WPiI2@pkgf!d* z_TgmvmjhEb(eXy{QozmxvYOS!P*W|hjy`M$#5`(6v&T6s9EYCFlU^OMoFkf_Z z9yuT|4NBl^L$~kSC_MJzE4%7a0mlg|_tkX-9H+fBrVJY6PW*#YHgcIrNBD?rNT&t9 zq;I6Fby}!f_NG((J^ADGWZ`wmKcs8*`Ix?6-cG07=fOScleL*@{XSf?d*zdvlzzI5 zu?OV3Ov-(wlCc^t_d{Jek+G@rS5P-57@H>l0d8%Qu_dx>YDzqwku#>&y3aun_Q>T^ Tt1AkV8C$NFNsBC2o3Vcb`4OOn delta 3455 zcmbVPdu*Fm6~Fg>{``m?zw>C*#3l(zl`J-)-8xa!#o2%bm5Hii?M6GVNzCGrq$P1W zin6*HTUpjriF2K%g|6EIgooO}$h49_SWEwy7^5Ttfu^Z+?z)amNJHrgZPj++cdkDt z#vmbarE|aYJMVk$Bk>QS&wq6+D6Tc6s;i@Yf-xeUF@_K0AhSlyJ|*{qB{Gx9pq0@3 zp(mn2emT7(y_PxBn+$p+HP@8NtV(6vsheKyoxfg|9$x01ZvKVk!c}Mbhp<}59cjko z{d~12Fzy<6z2X}8)Q-yM7p}6?j7_{WlsQ~KF&iGf^I+rb-!I<$pm|9%T>sQ;*P-Rw-cHS>0x4I@Ix%^} z5-PpI(w6zhZrSFY=^B~TUf;e-b@K`~!vv18Y0zrLWv5zv1lx^fXZ61a9t3?6TjR}| zs5u*FnOWH-%U*nR?#9ebvHjSuiQwGKDL>kjRPlkoMdA|P3e2f})FRX;_{)%3?gM&*m=12Mw$mR%o}_i=Z|N=a%xkswKi8?b zu=&~(?Z_@n|E=pMkVi~&?dPyCm%~_06Kk=7O^P2Y{$sK^z6D|{A1D3!{TtWwT#TTd{LK22F@h|6B20)aCk)yVMtVwCB#V|E z1P+UR*@aR$Dp3Lzw$=WCieId=W*-?k?VRLT_*z5a&bMVKp11j^B=09sZWsxD*}7R6 zUV`0*9tl44+md>2IYm4hl8a@f(pfgZz4Cb3r!1PXJ7P$;$kOuaWPhR)*FV$+a|~V3 z#qw+1=43cAIASzAFbiY$=gG+?C-*Y)VVoldT|nF^ctU_<$Tf{3W%XZBMf{BlB;wt&xNNI@qukls8SCD$CtK7~f!J^=kWR5j^V(Lb?x#`|}n9}u+<#Jdym-sq0qeNok;Xvdz8 z?pQxFP)|SW+&R$R9b>%%J?*i+{z(7k*dsl$-b6p^j&(*q7w?VrDel2o7qR_uDFS85 zXfzS;_JM-zaENnMx+X$(&)F@G?CM$B6VFcEXk06H=1AixL5 zJ3FW`4}nx5Vjfl?IUdxAYd2ITVmb|=6Vqh?Gck{X1RF8ammW0mRrwjd3AvedNgkJ+ z_$vyxOWq+l@#JG-AMvi|46mem%;?QBvtxKxgOOag+*_vPEvxSRPq~AAL$F++rKhbh zPVRXtjFXkOP~v|NG>uHu_S_(z+DSxR%njnJgyc=tGnay4QGJKH$D|ePdCVK~@Jqn= z2zf_Mm3Ld7I0Ny0LVm5LO6(GHf6WH*c_Ci|>J#!kp#4JD)rNGcU{F3#TS4;OwN)jh z_^V07jqUu%DC>;;N$vNxGd5&sOl)u|6IlwjA2|1~rW?;gDo-DTehQd2i0+bG2=*fQ zDHRR-0{yJ~^(TEvY7bd>A^8(5x(o}-a1l5GjJvHOTn1jwsIiZMsg3k67Wr#0l?b(IEn^+z&N?@Q(^NOBq$`HT8p z0e-UpzY9!1D`?O@E)?i*0h0+0YJy)iBwGUEMiZO)WBs6zTNMQ@z-z$v-#M=_63#!iQ?iSHNAi z%7#$2{vKZFNx3Ohqd$%xJ@?8~*e6FqZu4)-89UD86igB;7^_r@b0N2$s$^`JTz~^d ihwoIWZVS7`-3@X>xX%1p2 diff --git a/P4/P4/Debug/P4.hex b/P4/P4/Debug/P4.hex index ba2966d..970d2a8 100644 --- a/P4/P4/Debug/P4.hex +++ b/P4/P4/Debug/P4.hex @@ -1,43 +1,54 @@ -:100000000C9434000C9451000C9451000C94670033 +:100000000C9434000C9451000C9451000C94C400D6 :100010000C9451000C9451000C9451000C9451001C :100020000C9451000C9451000C9451000C9451000C -:100030000C9451000C9451000C9451000C945100FC +:100030000C9451000C9451000C947F000C945100CE :100040000C9451000C9451000C9451000C945100EC :100050000C9451000C9451000C9451000C945100DC :100060000C9451000C94510011241FBECFEFD8E026 -:10007000DEBFCDBF11E0A0E0B1E0E2E7F2E002C0F8 +:10007000DEBFCDBF11E0A0E0B1E0EEE2F3E002C0F0 :1000800005900D92A431B107D9F721E0A4E1B1E0C8 -:1000900001C01D92A631B207E1F70E94A5000C94A1 -:1000A00037010C9400008FEF8AB981E084B985B1E3 -:1000B000866085B9F894E8E6F0E08081816080830D -:1000C000EBE6F0E0808186608083789408951F924B -:1000D0000F920FB60F9211248F939F93199916C008 -:1000E0008091140190911501892B31F484E690E000 -:1000F0009093150180931401809114019091150142 -:100100000197909315018093140118C01A9916C095 -:1001100080911401909115018336910531F48FEF90 -:100120009FEF909315018093140180911401909199 -:100130001501019690931501809314019F918F9161 -:100140000F900FBE0F901F9018950E945300809142 -:100150001401909115010E94AE00F9CF0F931F93E7 -:10016000CF93DF93CDB7DEB768970FB6F894DEBFB5 -:100170000FBECDBF9C0184E1E0E0F1E0DE0111960D -:1001800001900D928A95E1F70AE010E0C901B801EB -:100190000E940F01FC01EE0FFF1F41E050E04C0FE9 -:1001A0005D1FE40FF51F408151815E8B4D8BF9017E -:1001B000E81BF90BCF01B8010E940F01FB01EE0F04 -:1001C000FF1F41E050E04C0F5D1FE40FF51F8081E1 -:1001D0009181988F8F8B8D899E898BB98FE39CE954 -:1001E0000197F1F700C0000095B181E0982795B91B -:1001F0002F89388D2BB9EFE3FCE93197F1F700C077 -:10020000000095B1892785B968960FB6F894DEBFCE -:100210000FBECDBFDF91CF911F910F91089597FB36 -:10022000072E16F4009407D077FD09D00E94230111 -:1002300007FC05D03EF4909581959F4F08957095E9 -:1002400061957F4F0895AA1BBB1B51E107C0AA1FF0 -:10025000BB1FA617B70710F0A61BB70B881F991F67 -:100260005A95A9F780959095BC01CD010895F89411 -:02027000FFCFBE -:10027200C000F900A4003000990092008200F8004A -:040282008000900068 +:1000900001C01D92AA31B207E1F70E947A000C94C8 +:1000A00095010C94000084B5826084BD85B58360A1 +:1000B00085BD89EF87BDEEE6F0E0808182608083B8 +:1000C00008958FEF8AB981E084B985B1866085B9DA +:1000D000F894E8E6F0E0808181608083EBE6F0E070 +:1000E000808186608083789408950E9453000E94E6 +:1000F000610008950E9475000E940101FDCF1F92CA +:100100000F920FB60F9211248F939F93AF93BF93CB +:100110008091160190911701A0911801B0911901D9 +:100120000196A11DB11D8093160190931701A09314 +:100130001801B0931901BF91AF919F918F910F90CA +:100140000FBE0F901F9018950F931F9300911601EB +:10015000109117012091180130911901AB01BC01D8 +:10016000400F511F621F731F80911601909117015C +:10017000A0911801B091190184179507A607B70738 +:1001800099F71F910F9108951F920F920FB60F923A +:1001900011248F939F93199915C080911401909108 +:1001A0001501892B31F484E690E09093150180933A +:1001B00014018091140190911501019790931501FC +:1001C000809314011A9916C0809114019091150121 +:1001D0008336910531F48FEF9FEF90931501809353 +:1001E00014018091140190911501019690931501CD +:1001F000809314019F918F910F900FBE0F901F90CD +:1002000018951F93CF93DF93CDB7DEB768970FB6DE +:10021000F894DEBF0FBECDBF84E1E0E0F1E0DE0187 +:10022000119601900D928A95E1F7809114019091B9 +:1002300015012AE030E0B9010E946D01FC01EE0FCA +:10024000FF1F41E050E04C0F5D1FE40FF51F808160 +:1002500091819E8B8D8BE0911401F091150180911D +:10026000140190911501B9010E946D01AF01481B65 +:10027000590BCA01B9010E946D01FB01EE0FFF1F6E +:1002800081E090E08C0F9D1FE80FF91F8081918124 +:10029000988F8F8B8D899E898BB96AE070E080E0A2 +:1002A00090E00E94A40085B111E0812785B98F8973 +:1002B000988D8BB96AE070E080E090E00E94A40025 +:1002C00085B1182715B968960FB6F894DEBF0FBE32 +:1002D000CDBFDF91CF911F91089597FB072E16F4A4 +:1002E000009407D077FD09D00E94810107FC05D05A +:1002F0003EF4909581959F4F0895709561957F4F3D +:100300000895AA1BBB1B51E107C0AA1FBB1FA6175C +:10031000B70710F0A61BB70B881F991F5A95A9F7AE +:0E03200080959095BC01CD010895F894FFCF13 +:10032E00C000F900A4003000990092008200F8008D +:04033E0080009000AB :00000001FF diff --git a/P4/P4/Debug/P4.lss b/P4/P4/Debug/P4.lss index 6f9f17c..f13a340 100644 --- a/P4/P4/Debug/P4.lss +++ b/P4/P4/Debug/P4.lss @@ -3,31 +3,31 @@ P4.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000014 00800100 00000272 00000306 2**0 + 0 .data 00000014 00800100 0000032e 000003c2 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 00000272 00000000 00000000 00000094 2**1 + 1 .text 0000032e 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000002 00800114 00800114 0000031a 2**0 + 2 .bss 00000006 00800114 00800114 000003d6 2**0 ALLOC - 3 .comment 00000030 00000000 00000000 0000031a 2**0 + 3 .comment 00000030 00000000 00000000 000003d6 2**0 CONTENTS, READONLY - 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 0000034c 2**2 + 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000408 2**2 CONTENTS, READONLY - 5 .debug_aranges 00000068 00000000 00000000 0000038c 2**0 + 5 .debug_aranges 00000090 00000000 00000000 00000448 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 000008f2 00000000 00000000 000003f4 2**0 + 6 .debug_info 0000094d 00000000 00000000 000004d8 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 00000797 00000000 00000000 00000ce6 2**0 + 7 .debug_abbrev 00000799 00000000 00000000 00000e25 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 00000448 00000000 00000000 0000147d 2**0 + 8 .debug_line 00000432 00000000 00000000 000015be 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 000000ac 00000000 00000000 000018c8 2**2 + 9 .debug_frame 00000124 00000000 00000000 000019f0 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 0000041d 00000000 00000000 00001974 2**0 + 10 .debug_str 0000042d 00000000 00000000 00001b14 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 00000170 00000000 00000000 00001d91 2**0 + 11 .debug_loc 0000012f 00000000 00000000 00001f41 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000038 00000000 00000000 00001f01 2**0 + 12 .debug_ranges 00000060 00000000 00000000 00002070 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -36,7 +36,7 @@ Disassembly of section .text: 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> - c: 0c 94 67 00 jmp 0xce ; 0xce <__vector_3> + c: 0c 94 c4 00 jmp 0x188 ; 0x188 <__vector_3> 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> @@ -47,7 +47,7 @@ Disassembly of section .text: 2c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> - 38: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 38: 0c 94 7f 00 jmp 0xfe ; 0xfe <__vector_14> 3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> @@ -72,8 +72,8 @@ Disassembly of section .text: 74: 11 e0 ldi r17, 0x01 ; 1 76: a0 e0 ldi r26, 0x00 ; 0 78: b1 e0 ldi r27, 0x01 ; 1 - 7a: e2 e7 ldi r30, 0x72 ; 114 - 7c: f2 e0 ldi r31, 0x02 ; 2 + 7a: ee e2 ldi r30, 0x2E ; 46 + 7c: f3 e0 ldi r31, 0x03 ; 3 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10> 80: 05 90 lpm r0, Z+ 82: 0d 92 st X+, r0 @@ -91,315 +91,432 @@ Disassembly of section .text: 92: 1d 92 st X+, r1 00000094 <.do_clear_bss_start>: - 94: a6 31 cpi r26, 0x16 ; 22 + 94: aa 31 cpi r26, 0x1A ; 26 96: b2 07 cpc r27, r18 98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop> - 9a: 0e 94 a5 00 call 0x14a ; 0x14a
- 9e: 0c 94 37 01 jmp 0x26e ; 0x26e <_exit> + 9a: 0e 94 7a 00 call 0xf4 ; 0xf4
+ 9e: 0c 94 95 01 jmp 0x32a ; 0x32a <_exit> 000000a2 <__bad_interrupt>: a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -000000a6 : +000000a6 : #include "keys.h" - -void init(){ - DDRD = 0xff; // Data direction register D (D0 -> D6) as output - a6: 8f ef ldi r24, 0xFF ; 255 - a8: 8a b9 out 0x0a, r24 ; 10 - // PORTD = 0xff; // setting bit for 7-segment show 0 - // => spielt keine Rolle, wird von der while Schleife übernommen - - DDRB = 0x01; // Data direction register B (B0) as output and DDRB (B1, B2) as input - aa: 81 e0 ldi r24, 0x01 ; 1 - ac: 84 b9 out 0x04, r24 ; 4 - PORTB |= (1 << PINB1) | (1 << PINB2) ; // setting bit for teens and SW1-2 - ae: 85 b1 in r24, 0x05 ; 5 - b0: 86 60 ori r24, 0x06 ; 6 - b2: 85 b9 out 0x05, r24 ; 5 - - // mit unserem Atmega nicht möglich, da keine PCINT8_vect und PCINT9_vect vorhanden - // DDRC = 0x00; // Data direction register C as input for SW1 and SW2 - // PORTC |= (1< PINC0 and SW2 -> PINC1 - - cli(); // clear global interrupt flag: interrupts will be immediately disabled - b4: f8 94 cli - PCICR |= 0x01; // Pin Change Interrupt Control Register: turn on PortB - b6: e8 e6 ldi r30, 0x68 ; 104 +void setupTimer0() { + // Configure Timer0 for CTC mode + TCCR0A |= (1 << WGM01); // Set Waveform Generation Mode bits for CTC + a6: 84 b5 in r24, 0x24 ; 36 + a8: 82 60 ori r24, 0x02 ; 2 + aa: 84 bd out 0x24, r24 ; 36 + TCCR0B |= (1 << CS01) | (1 << CS00); // Set prescaler to 64 + ac: 85 b5 in r24, 0x25 ; 37 + ae: 83 60 ori r24, 0x03 ; 3 + b0: 85 bd out 0x25, r24 ; 37 + OCR0A = 249; // Set Output Compare Register to 249 for ~1ms interrupt + b2: 89 ef ldi r24, 0xF9 ; 249 + b4: 87 bd out 0x27, r24 ; 39 + TIMSK0 |= (1 << OCIE0A); // Enable Timer0 Output Compare A Match interrupt + b6: ee e6 ldi r30, 0x6E ; 110 b8: f0 e0 ldi r31, 0x00 ; 0 ba: 80 81 ld r24, Z - bc: 81 60 ori r24, 0x01 ; 1 + bc: 82 60 ori r24, 0x02 ; 2 be: 80 83 st Z, r24 - PCMSK0 |= (1 << PINB1) | (1 << PINB2); // trigger interrupt when SW1 or SW2 is pressed - c0: eb e6 ldi r30, 0x6B ; 107 - c2: f0 e0 ldi r31, 0x00 ; 0 - c4: 80 81 ld r24, Z - c6: 86 60 ori r24, 0x06 ; 6 - c8: 80 83 st Z, r24 - sei(); // set global interrupt enable - ca: 78 94 sei - cc: 08 95 ret + c0: 08 95 ret -000000ce <__vector_3>: +000000c2 : +} + +void setupRegisters(){ + DDRD = 0xff; // Data direction register D (D0 -> D6) as output + c2: 8f ef ldi r24, 0xFF ; 255 + c4: 8a b9 out 0x0a, r24 ; 10 + // PORTD = 0xff; // setting bit for 7-segment show 0 + // => spielt keine Rolle, wird von der while Schleife �bernommen + + DDRB = 0x01; // Data direction register B (B0) as output and DDRB (B1, B2) as input + c6: 81 e0 ldi r24, 0x01 ; 1 + c8: 84 b9 out 0x04, r24 ; 4 + PORTB |= (1 << PINB1) | (1 << PINB2) ; // setting bit for teens B0=0 and SW1-2 + ca: 85 b1 in r24, 0x05 ; 5 + cc: 86 60 ori r24, 0x06 ; 6 + ce: 85 b9 out 0x05, r24 ; 5 + + // mit unserem Atmega nicht m�glich, da keine PCINT8_vect und PCINT9_vect vorhanden + // DDRC = 0x00; // Data direction register C as input for SW1 and SW2 + // PORTC |= (1< PINC0 and SW2 -> PINC1 + + cli(); // clear global interrupt flag: interrupts will be immediately disabled + d0: f8 94 cli + PCICR |= 0x01; // Pin Change Interrupt Control Register: turn on PortB + d2: e8 e6 ldi r30, 0x68 ; 104 + d4: f0 e0 ldi r31, 0x00 ; 0 + d6: 80 81 ld r24, Z + d8: 81 60 ori r24, 0x01 ; 1 + da: 80 83 st Z, r24 + PCMSK0 |= (1 << PINB1) | (1 << PINB2); // trigger interrupt when SW1 or SW2 is pressed + dc: eb e6 ldi r30, 0x6B ; 107 + de: f0 e0 ldi r31, 0x00 ; 0 + e0: 80 81 ld r24, Z + e2: 86 60 ori r24, 0x06 ; 6 + e4: 80 83 st Z, r24 + sei(); // set global interrupt enable + e6: 78 94 sei + e8: 08 95 ret + +000000ea : + +} + +void init(){ + setupTimer0(); + ea: 0e 94 53 00 call 0xa6 ; 0xa6 + setupRegisters(); + ee: 0e 94 61 00 call 0xc2 ; 0xc2 + f2: 08 95 ret + +000000f4
: #include "keys.h" #include "sevenseg.h" +int main(void) { + init(); + f4: 0e 94 75 00 call 0xea ; 0xea + + while(1) { + display(); + f8: 0e 94 01 01 call 0x202 ; 0x202 + fc: fd cf rjmp .-6 ; 0xf8 + +000000fe <__vector_14>: + systemClock++; +} + +uint32_t getSystemClock(){ + return systemClock; +} + fe: 1f 92 push r1 + 100: 0f 92 push r0 + 102: 0f b6 in r0, 0x3f ; 63 + 104: 0f 92 push r0 + 106: 11 24 eor r1, r1 + 108: 8f 93 push r24 + 10a: 9f 93 push r25 + 10c: af 93 push r26 + 10e: bf 93 push r27 + 110: 80 91 16 01 lds r24, 0x0116 ; 0x800116 + 114: 90 91 17 01 lds r25, 0x0117 ; 0x800117 + 118: a0 91 18 01 lds r26, 0x0118 ; 0x800118 + 11c: b0 91 19 01 lds r27, 0x0119 ; 0x800119 + 120: 01 96 adiw r24, 0x01 ; 1 + 122: a1 1d adc r26, r1 + 124: b1 1d adc r27, r1 + 126: 80 93 16 01 sts 0x0116, r24 ; 0x800116 + 12a: 90 93 17 01 sts 0x0117, r25 ; 0x800117 + 12e: a0 93 18 01 sts 0x0118, r26 ; 0x800118 + 132: b0 93 19 01 sts 0x0119, r27 ; 0x800119 + 136: bf 91 pop r27 + 138: af 91 pop r26 + 13a: 9f 91 pop r25 + 13c: 8f 91 pop r24 + 13e: 0f 90 pop r0 + 140: 0f be out 0x3f, r0 ; 63 + 142: 0f 90 pop r0 + 144: 1f 90 pop r1 + 146: 18 95 reti + +00000148 : + +void waitFor(uint32_t ms) { + 148: 0f 93 push r16 + 14a: 1f 93 push r17 +ISR(TIMER0_COMPA_vect) { + systemClock++; +} + +uint32_t getSystemClock(){ + return systemClock; + 14c: 00 91 16 01 lds r16, 0x0116 ; 0x800116 + 150: 10 91 17 01 lds r17, 0x0117 ; 0x800117 + 154: 20 91 18 01 lds r18, 0x0118 ; 0x800118 + 158: 30 91 19 01 lds r19, 0x0119 ; 0x800119 +} + +void waitFor(uint32_t ms) { + uint32_t endTime = getSystemClock() + ms; + 15c: ab 01 movw r20, r22 + 15e: bc 01 movw r22, r24 + 160: 40 0f add r20, r16 + 162: 51 1f adc r21, r17 + 164: 62 1f adc r22, r18 + 166: 73 1f adc r23, r19 +ISR(TIMER0_COMPA_vect) { + systemClock++; +} + +uint32_t getSystemClock(){ + return systemClock; + 168: 80 91 16 01 lds r24, 0x0116 ; 0x800116 + 16c: 90 91 17 01 lds r25, 0x0117 ; 0x800117 + 170: a0 91 18 01 lds r26, 0x0118 ; 0x800118 + 174: b0 91 19 01 lds r27, 0x0119 ; 0x800119 +} + +void waitFor(uint32_t ms) { + uint32_t endTime = getSystemClock() + ms; + while (getSystemClock() != endTime); + 178: 84 17 cp r24, r20 + 17a: 95 07 cpc r25, r21 + 17c: a6 07 cpc r26, r22 + 17e: b7 07 cpc r27, r23 + 180: 99 f7 brne .-26 ; 0x168 +} + 182: 1f 91 pop r17 + 184: 0f 91 pop r16 + 186: 08 95 ret + +00000188 <__vector_3>: + +//-Counter------------------------------------- + volatile int count = 0; ISR(PCINT0_vect) { // every 10ms interrupt is triggered - ce: 1f 92 push r1 - d0: 0f 92 push r0 - d2: 0f b6 in r0, 0x3f ; 63 - d4: 0f 92 push r0 - d6: 11 24 eor r1, r1 - d8: 8f 93 push r24 - da: 9f 93 push r25 - if (!(PINB & (1< - if (count == 0) { - e0: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> - e4: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> - e8: 89 2b or r24, r25 - ea: 31 f4 brne .+12 ; 0xf8 <__vector_3+0x2a> - count = 100; // 100 - 1 = 99 - ec: 84 e6 ldi r24, 0x64 ; 100 - ee: 90 e0 ldi r25, 0x00 ; 0 - f0: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> - f4: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> - } + 188: 1f 92 push r1 + 18a: 0f 92 push r0 + 18c: 0f b6 in r0, 0x3f ; 63 + 18e: 0f 92 push r0 + 190: 11 24 eor r1, r1 + 192: 8f 93 push r24 + 194: 9f 93 push r25 + + if (!(PINB & (1< sw1 is pressed + 196: 19 99 sbic 0x03, 1 ; 3 + 198: 15 c0 rjmp .+42 ; 0x1c4 <__vector_3+0x3c> + if (count == 0) count = 100; // 100 - 1 = 99 + 19a: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 19e: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 1a2: 89 2b or r24, r25 + 1a4: 31 f4 brne .+12 ; 0x1b2 <__vector_3+0x2a> + 1a6: 84 e6 ldi r24, 0x64 ; 100 + 1a8: 90 e0 ldi r25, 0x00 ; 0 + 1aa: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> + 1ae: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> count--; - f8: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> - fc: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> - 100: 01 97 sbiw r24, 0x01 ; 1 - 102: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> - 106: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> - 10a: 18 c0 rjmp .+48 ; 0x13c <__vector_3+0x6e> + 1b2: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 1b6: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 1ba: 01 97 sbiw r24, 0x01 ; 1 + 1bc: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> + 1c0: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> } - else if (!(PINB & (1< - if (count == 99) { - 110: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> - 114: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> - 118: 83 36 cpi r24, 0x63 ; 99 - 11a: 91 05 cpc r25, r1 - 11c: 31 f4 brne .+12 ; 0x12a <__vector_3+0x5c> - count = -1; // -1 + 1 = 0 - 11e: 8f ef ldi r24, 0xFF ; 255 - 120: 9f ef ldi r25, 0xFF ; 255 - 122: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> - 126: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> - } + + if (!(PINB & (1< sw2 is pressed + 1c4: 1a 99 sbic 0x03, 2 ; 3 + 1c6: 16 c0 rjmp .+44 ; 0x1f4 <__vector_3+0x6c> + if (count == 99) count = -1; // -1 + 1 = 0 + 1c8: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 1cc: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 1d0: 83 36 cpi r24, 0x63 ; 99 + 1d2: 91 05 cpc r25, r1 + 1d4: 31 f4 brne .+12 ; 0x1e2 <__vector_3+0x5a> + 1d6: 8f ef ldi r24, 0xFF ; 255 + 1d8: 9f ef ldi r25, 0xFF ; 255 + 1da: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> + 1de: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> count++; - 12a: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> - 12e: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> - 132: 01 96 adiw r24, 0x01 ; 1 - 134: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> - 138: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> + 1e2: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 1e6: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 1ea: 01 96 adiw r24, 0x01 ; 1 + 1ec: 90 93 15 01 sts 0x0115, r25 ; 0x800115 <__data_end+0x1> + 1f0: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <__data_end> } } - 13c: 9f 91 pop r25 - 13e: 8f 91 pop r24 - 140: 0f 90 pop r0 - 142: 0f be out 0x3f, r0 ; 63 - 144: 0f 90 pop r0 - 146: 1f 90 pop r1 - 148: 18 95 reti + 1f4: 9f 91 pop r25 + 1f6: 8f 91 pop r24 + 1f8: 0f 90 pop r0 + 1fa: 0f be out 0x3f, r0 ; 63 + 1fc: 0f 90 pop r0 + 1fe: 1f 90 pop r1 + 200: 18 95 reti -0000014a
: +00000202 : -int main(void) { - init(); - 14a: 0e 94 53 00 call 0xa6 ; 0xa6 - - while(1) { - display(count); - 14e: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> - 152: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> - 156: 0e 94 ae 00 call 0x15c ; 0x15c - 15a: f9 cf rjmp .-14 ; 0x14e +//-Display-------------------------------------- -0000015c : -#include "sevenseg.h" - -void display(int count) { - 15c: 0f 93 push r16 - 15e: 1f 93 push r17 - 160: cf 93 push r28 - 162: df 93 push r29 - 164: cd b7 in r28, 0x3d ; 61 - 166: de b7 in r29, 0x3e ; 62 - 168: 68 97 sbiw r28, 0x18 ; 24 - 16a: 0f b6 in r0, 0x3f ; 63 - 16c: f8 94 cli - 16e: de bf out 0x3e, r29 ; 62 - 170: 0f be out 0x3f, r0 ; 63 - 172: cd bf out 0x3d, r28 ; 61 - 174: 9c 01 movw r18, r24 +void display() { + 202: 1f 93 push r17 + 204: cf 93 push r28 + 206: df 93 push r29 + 208: cd b7 in r28, 0x3d ; 61 + 20a: de b7 in r29, 0x3e ; 62 + 20c: 68 97 sbiw r28, 0x18 ; 24 + 20e: 0f b6 in r0, 0x3f ; 63 + 210: f8 94 cli + 212: de bf out 0x3e, r29 ; 62 + 214: 0f be out 0x3f, r0 ; 63 + 216: cd bf out 0x3d, r28 ; 61 7 : 1111 1000 = F8 248 8 : 1000 0000 = 80 128 9 : 1001 0000 = 90 144 */ int numbersAsSegments[10] = { 192, 249, 164, 48, 153, 146, 130, 248, 128, 144 }; // display number from 0 to 9; - 176: 84 e1 ldi r24, 0x14 ; 20 - 178: e0 e0 ldi r30, 0x00 ; 0 - 17a: f1 e0 ldi r31, 0x01 ; 1 - 17c: de 01 movw r26, r28 - 17e: 11 96 adiw r26, 0x01 ; 1 - 180: 01 90 ld r0, Z+ - 182: 0d 92 st X+, r0 - 184: 8a 95 dec r24 - 186: e1 f7 brne .-8 ; 0x180 + 218: 84 e1 ldi r24, 0x14 ; 20 + 21a: e0 e0 ldi r30, 0x00 ; 0 + 21c: f1 e0 ldi r31, 0x01 ; 1 + 21e: de 01 movw r26, r28 + 220: 11 96 adiw r26, 0x01 ; 1 + 222: 01 90 ld r0, Z+ + 224: 0d 92 st X+, r0 + 226: 8a 95 dec r24 + 228: e1 f7 brne .-8 ; 0x222 - volatile int led_Einer = numbersAsSegments[(int) count % 10]; // Segmentanzeige für Zehner - 188: 0a e0 ldi r16, 0x0A ; 10 - 18a: 10 e0 ldi r17, 0x00 ; 0 - 18c: c9 01 movw r24, r18 - 18e: b8 01 movw r22, r16 - 190: 0e 94 0f 01 call 0x21e ; 0x21e <__divmodhi4> - 194: fc 01 movw r30, r24 - 196: ee 0f add r30, r30 - 198: ff 1f adc r31, r31 - 19a: 41 e0 ldi r20, 0x01 ; 1 - 19c: 50 e0 ldi r21, 0x00 ; 0 - 19e: 4c 0f add r20, r28 - 1a0: 5d 1f adc r21, r29 - 1a2: e4 0f add r30, r20 - 1a4: f5 1f adc r31, r21 - 1a6: 40 81 ld r20, Z - 1a8: 51 81 ldd r21, Z+1 ; 0x01 - 1aa: 5e 8b std Y+22, r21 ; 0x16 - 1ac: 4d 8b std Y+21, r20 ; 0x15 + volatile int led_Einer = numbersAsSegments[(int) count % 10]; // Segmentanzeige für Zehner + 22a: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 22e: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 232: 2a e0 ldi r18, 0x0A ; 10 + 234: 30 e0 ldi r19, 0x00 ; 0 + 236: b9 01 movw r22, r18 + 238: 0e 94 6d 01 call 0x2da ; 0x2da <__divmodhi4> + 23c: fc 01 movw r30, r24 + 23e: ee 0f add r30, r30 + 240: ff 1f adc r31, r31 + 242: 41 e0 ldi r20, 0x01 ; 1 + 244: 50 e0 ldi r21, 0x00 ; 0 + 246: 4c 0f add r20, r28 + 248: 5d 1f adc r21, r29 + 24a: e4 0f add r30, r20 + 24c: f5 1f adc r31, r21 + 24e: 80 81 ld r24, Z + 250: 91 81 ldd r25, Z+1 ; 0x01 + 252: 9e 8b std Y+22, r25 ; 0x16 + 254: 8d 8b std Y+21, r24 ; 0x15 volatile int led_Zehner = numbersAsSegments[(int) (count - (count % 10)) / 10]; // Segmentanzeige für Einer - 1ae: f9 01 movw r30, r18 - 1b0: e8 1b sub r30, r24 - 1b2: f9 0b sbc r31, r25 - 1b4: cf 01 movw r24, r30 - 1b6: b8 01 movw r22, r16 - 1b8: 0e 94 0f 01 call 0x21e ; 0x21e <__divmodhi4> - 1bc: fb 01 movw r30, r22 - 1be: ee 0f add r30, r30 - 1c0: ff 1f adc r31, r31 - 1c2: 41 e0 ldi r20, 0x01 ; 1 - 1c4: 50 e0 ldi r21, 0x00 ; 0 - 1c6: 4c 0f add r20, r28 - 1c8: 5d 1f adc r21, r29 - 1ca: e4 0f add r30, r20 - 1cc: f5 1f adc r31, r21 - 1ce: 80 81 ld r24, Z - 1d0: 91 81 ldd r25, Z+1 ; 0x01 - 1d2: 98 8f std Y+24, r25 ; 0x18 - 1d4: 8f 8b std Y+23, r24 ; 0x17 + 256: e0 91 14 01 lds r30, 0x0114 ; 0x800114 <__data_end> + 25a: f0 91 15 01 lds r31, 0x0115 ; 0x800115 <__data_end+0x1> + 25e: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <__data_end> + 262: 90 91 15 01 lds r25, 0x0115 ; 0x800115 <__data_end+0x1> + 266: b9 01 movw r22, r18 + 268: 0e 94 6d 01 call 0x2da ; 0x2da <__divmodhi4> + 26c: af 01 movw r20, r30 + 26e: 48 1b sub r20, r24 + 270: 59 0b sbc r21, r25 + 272: ca 01 movw r24, r20 + 274: b9 01 movw r22, r18 + 276: 0e 94 6d 01 call 0x2da ; 0x2da <__divmodhi4> + 27a: fb 01 movw r30, r22 + 27c: ee 0f add r30, r30 + 27e: ff 1f adc r31, r31 + 280: 81 e0 ldi r24, 0x01 ; 1 + 282: 90 e0 ldi r25, 0x00 ; 0 + 284: 8c 0f add r24, r28 + 286: 9d 1f adc r25, r29 + 288: e8 0f add r30, r24 + 28a: f9 1f adc r31, r25 + 28c: 80 81 ld r24, Z + 28e: 91 81 ldd r25, Z+1 ; 0x01 + 290: 98 8f std Y+24, r25 ; 0x18 + 292: 8f 8b std Y+23, r24 ; 0x17 PORTD = led_Einer; - 1d6: 8d 89 ldd r24, Y+21 ; 0x15 - 1d8: 9e 89 ldd r25, Y+22 ; 0x16 - 1da: 8b b9 out 0x0b, r24 ; 11 - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 1dc: 8f e3 ldi r24, 0x3F ; 63 - 1de: 9c e9 ldi r25, 0x9C ; 156 - 1e0: 01 97 sbiw r24, 0x01 ; 1 - 1e2: f1 f7 brne .-4 ; 0x1e0 - 1e4: 00 c0 rjmp .+0 ; 0x1e6 - 1e6: 00 00 nop - _delay_ms(10); + 294: 8d 89 ldd r24, Y+21 ; 0x15 + 296: 9e 89 ldd r25, Y+22 ; 0x16 + 298: 8b b9 out 0x0b, r24 ; 11 + //_delay_ms(10); + waitFor(10); + 29a: 6a e0 ldi r22, 0x0A ; 10 + 29c: 70 e0 ldi r23, 0x00 ; 0 + 29e: 80 e0 ldi r24, 0x00 ; 0 + 2a0: 90 e0 ldi r25, 0x00 ; 0 + 2a2: 0e 94 a4 00 call 0x148 ; 0x148 PORTB ^= (1 << PINB0); - 1e8: 95 b1 in r25, 0x05 ; 5 - 1ea: 81 e0 ldi r24, 0x01 ; 1 - 1ec: 98 27 eor r25, r24 - 1ee: 95 b9 out 0x05, r25 ; 5 + 2a6: 85 b1 in r24, 0x05 ; 5 + 2a8: 11 e0 ldi r17, 0x01 ; 1 + 2aa: 81 27 eor r24, r17 + 2ac: 85 b9 out 0x05, r24 ; 5 PORTD = led_Zehner; - 1f0: 2f 89 ldd r18, Y+23 ; 0x17 - 1f2: 38 8d ldd r19, Y+24 ; 0x18 - 1f4: 2b b9 out 0x0b, r18 ; 11 - 1f6: ef e3 ldi r30, 0x3F ; 63 - 1f8: fc e9 ldi r31, 0x9C ; 156 - 1fa: 31 97 sbiw r30, 0x01 ; 1 - 1fc: f1 f7 brne .-4 ; 0x1fa - 1fe: 00 c0 rjmp .+0 ; 0x200 - 200: 00 00 nop - _delay_ms(10); + 2ae: 8f 89 ldd r24, Y+23 ; 0x17 + 2b0: 98 8d ldd r25, Y+24 ; 0x18 + 2b2: 8b b9 out 0x0b, r24 ; 11 + //_delay_ms(10); + waitFor(10); + 2b4: 6a e0 ldi r22, 0x0A ; 10 + 2b6: 70 e0 ldi r23, 0x00 ; 0 + 2b8: 80 e0 ldi r24, 0x00 ; 0 + 2ba: 90 e0 ldi r25, 0x00 ; 0 + 2bc: 0e 94 a4 00 call 0x148 ; 0x148 PORTB ^= (1 << PINB0); - 202: 95 b1 in r25, 0x05 ; 5 - 204: 89 27 eor r24, r25 - 206: 85 b9 out 0x05, r24 ; 5 + 2c0: 85 b1 in r24, 0x05 ; 5 + 2c2: 18 27 eor r17, r24 + 2c4: 15 b9 out 0x05, r17 ; 5 } - 208: 68 96 adiw r28, 0x18 ; 24 - 20a: 0f b6 in r0, 0x3f ; 63 - 20c: f8 94 cli - 20e: de bf out 0x3e, r29 ; 62 - 210: 0f be out 0x3f, r0 ; 63 - 212: cd bf out 0x3d, r28 ; 61 - 214: df 91 pop r29 - 216: cf 91 pop r28 - 218: 1f 91 pop r17 - 21a: 0f 91 pop r16 - 21c: 08 95 ret + 2c6: 68 96 adiw r28, 0x18 ; 24 + 2c8: 0f b6 in r0, 0x3f ; 63 + 2ca: f8 94 cli + 2cc: de bf out 0x3e, r29 ; 62 + 2ce: 0f be out 0x3f, r0 ; 63 + 2d0: cd bf out 0x3d, r28 ; 61 + 2d2: df 91 pop r29 + 2d4: cf 91 pop r28 + 2d6: 1f 91 pop r17 + 2d8: 08 95 ret -0000021e <__divmodhi4>: - 21e: 97 fb bst r25, 7 - 220: 07 2e mov r0, r23 - 222: 16 f4 brtc .+4 ; 0x228 <__divmodhi4+0xa> - 224: 00 94 com r0 - 226: 07 d0 rcall .+14 ; 0x236 <__divmodhi4_neg1> - 228: 77 fd sbrc r23, 7 - 22a: 09 d0 rcall .+18 ; 0x23e <__divmodhi4_neg2> - 22c: 0e 94 23 01 call 0x246 ; 0x246 <__udivmodhi4> - 230: 07 fc sbrc r0, 7 - 232: 05 d0 rcall .+10 ; 0x23e <__divmodhi4_neg2> - 234: 3e f4 brtc .+14 ; 0x244 <__divmodhi4_exit> +000002da <__divmodhi4>: + 2da: 97 fb bst r25, 7 + 2dc: 07 2e mov r0, r23 + 2de: 16 f4 brtc .+4 ; 0x2e4 <__divmodhi4+0xa> + 2e0: 00 94 com r0 + 2e2: 07 d0 rcall .+14 ; 0x2f2 <__divmodhi4_neg1> + 2e4: 77 fd sbrc r23, 7 + 2e6: 09 d0 rcall .+18 ; 0x2fa <__divmodhi4_neg2> + 2e8: 0e 94 81 01 call 0x302 ; 0x302 <__udivmodhi4> + 2ec: 07 fc sbrc r0, 7 + 2ee: 05 d0 rcall .+10 ; 0x2fa <__divmodhi4_neg2> + 2f0: 3e f4 brtc .+14 ; 0x300 <__divmodhi4_exit> -00000236 <__divmodhi4_neg1>: - 236: 90 95 com r25 - 238: 81 95 neg r24 - 23a: 9f 4f sbci r25, 0xFF ; 255 - 23c: 08 95 ret +000002f2 <__divmodhi4_neg1>: + 2f2: 90 95 com r25 + 2f4: 81 95 neg r24 + 2f6: 9f 4f sbci r25, 0xFF ; 255 + 2f8: 08 95 ret -0000023e <__divmodhi4_neg2>: - 23e: 70 95 com r23 - 240: 61 95 neg r22 - 242: 7f 4f sbci r23, 0xFF ; 255 +000002fa <__divmodhi4_neg2>: + 2fa: 70 95 com r23 + 2fc: 61 95 neg r22 + 2fe: 7f 4f sbci r23, 0xFF ; 255 -00000244 <__divmodhi4_exit>: - 244: 08 95 ret +00000300 <__divmodhi4_exit>: + 300: 08 95 ret -00000246 <__udivmodhi4>: - 246: aa 1b sub r26, r26 - 248: bb 1b sub r27, r27 - 24a: 51 e1 ldi r21, 0x11 ; 17 - 24c: 07 c0 rjmp .+14 ; 0x25c <__udivmodhi4_ep> +00000302 <__udivmodhi4>: + 302: aa 1b sub r26, r26 + 304: bb 1b sub r27, r27 + 306: 51 e1 ldi r21, 0x11 ; 17 + 308: 07 c0 rjmp .+14 ; 0x318 <__udivmodhi4_ep> -0000024e <__udivmodhi4_loop>: - 24e: aa 1f adc r26, r26 - 250: bb 1f adc r27, r27 - 252: a6 17 cp r26, r22 - 254: b7 07 cpc r27, r23 - 256: 10 f0 brcs .+4 ; 0x25c <__udivmodhi4_ep> - 258: a6 1b sub r26, r22 - 25a: b7 0b sbc r27, r23 +0000030a <__udivmodhi4_loop>: + 30a: aa 1f adc r26, r26 + 30c: bb 1f adc r27, r27 + 30e: a6 17 cp r26, r22 + 310: b7 07 cpc r27, r23 + 312: 10 f0 brcs .+4 ; 0x318 <__udivmodhi4_ep> + 314: a6 1b sub r26, r22 + 316: b7 0b sbc r27, r23 -0000025c <__udivmodhi4_ep>: - 25c: 88 1f adc r24, r24 - 25e: 99 1f adc r25, r25 - 260: 5a 95 dec r21 - 262: a9 f7 brne .-22 ; 0x24e <__udivmodhi4_loop> - 264: 80 95 com r24 - 266: 90 95 com r25 - 268: bc 01 movw r22, r24 - 26a: cd 01 movw r24, r26 - 26c: 08 95 ret +00000318 <__udivmodhi4_ep>: + 318: 88 1f adc r24, r24 + 31a: 99 1f adc r25, r25 + 31c: 5a 95 dec r21 + 31e: a9 f7 brne .-22 ; 0x30a <__udivmodhi4_loop> + 320: 80 95 com r24 + 322: 90 95 com r25 + 324: bc 01 movw r22, r24 + 326: cd 01 movw r24, r26 + 328: 08 95 ret -0000026e <_exit>: - 26e: f8 94 cli +0000032a <_exit>: + 32a: f8 94 cli -00000270 <__stop_program>: - 270: ff cf rjmp .-2 ; 0x270 <__stop_program> +0000032c <__stop_program>: + 32c: ff cf rjmp .-2 ; 0x32c <__stop_program> diff --git a/P4/P4/Debug/P4.map b/P4/P4/Debug/P4.map index 3eddb4f..36d31be 100644 --- a/P4/P4/Debug/P4.map +++ b/P4/P4/Debug/P4.map @@ -7,7 +7,7 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) sevenseg.o (__do_copy_data) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) - main.o (__do_clear_bss) + sevenseg.o (__do_clear_bss) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) (__udivmodhi4) @@ -24,6 +24,8 @@ Discarded input sections .text 0x00000000 0x0 sevenseg.o .data 0x00000000 0x0 sevenseg.o .bss 0x00000000 0x0 sevenseg.o + .text.getSystemClock + 0x00000000 0x12 sevenseg.o .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) @@ -227,7 +229,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0x272 +.text 0x00000000 0x32e *(.vectors) .vectors 0x00000000 0x68 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o 0x00000000 __vector_default @@ -306,34 +308,44 @@ END GROUP 0x000000a2 __vector_21 0x000000a2 __vector_15 0x000000a2 __vector_8 - 0x000000a2 __vector_14 0x000000a2 __vector_10 0x000000a2 __vector_16 0x000000a2 __vector_18 0x000000a2 __vector_20 0x000000a6 . = ALIGN (0x2) *(.text.*) - .text.init 0x000000a6 0x28 keys.o - 0x000000a6 init + .text.setupTimer0 + 0x000000a6 0x1c keys.o + 0x000000a6 setupTimer0 + .text.setupRegisters + 0x000000c2 0x28 keys.o + 0x000000c2 setupRegisters + .text.init 0x000000ea 0xa keys.o + 0x000000ea init + .text.main 0x000000f4 0xa main.o + 0x000000f4 main + .text.__vector_14 + 0x000000fe 0x4a sevenseg.o + 0x000000fe __vector_14 + .text.waitFor 0x00000148 0x40 sevenseg.o + 0x00000148 waitFor .text.__vector_3 - 0x000000ce 0x7c main.o - 0x000000ce __vector_3 - .text.main 0x0000014a 0x12 main.o - 0x0000014a main - .text.display 0x0000015c 0xc2 sevenseg.o - 0x0000015c display + 0x00000188 0x7a sevenseg.o + 0x00000188 __vector_3 + .text.display 0x00000202 0xd8 sevenseg.o + 0x00000202 display .text.libgcc.div - 0x0000021e 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) - 0x0000021e _div - 0x0000021e __divmodhi4 + 0x000002da 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) + 0x000002da _div + 0x000002da __divmodhi4 .text.libgcc.div - 0x00000246 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) - 0x00000246 __udivmodhi4 - 0x0000026e . = ALIGN (0x2) + 0x00000302 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + 0x00000302 __udivmodhi4 + 0x0000032a . = ALIGN (0x2) *(.fini9) - .fini9 0x0000026e 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) - 0x0000026e _exit - 0x0000026e exit + .fini9 0x0000032a 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + 0x0000032a _exit + 0x0000032a exit *(.fini9) *(.fini8) *(.fini8) @@ -352,11 +364,11 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000026e 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .fini0 0x0000032a 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) *(.fini0) - 0x00000272 _etext = . + 0x0000032e _etext = . -.data 0x00800100 0x14 load address 0x00000272 +.data 0x00800100 0x14 load address 0x0000032e 0x00800100 PROVIDE (__data_start, .) *(.data) *(.data*) @@ -369,22 +381,25 @@ END GROUP 0x00800114 _edata = . 0x00800114 PROVIDE (__data_end, .) -.bss 0x00800114 0x2 +.bss 0x00800114 0x6 0x00800114 PROVIDE (__bss_start, .) *(.bss) *(.bss*) - .bss.count 0x00800114 0x2 main.o + .bss.count 0x00800114 0x2 sevenseg.o 0x00800114 count + .bss.systemClock + 0x00800116 0x4 sevenseg.o + 0x00800116 systemClock *(COMMON) - 0x00800116 PROVIDE (__bss_end, .) - 0x00000272 __data_load_start = LOADADDR (.data) - 0x00000286 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x0080011a PROVIDE (__bss_end, .) + 0x0000032e __data_load_start = LOADADDR (.data) + 0x00000342 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800116 0x0 +.noinit 0x0080011a 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00800116 _end = . + 0x0080011a _end = . [!provide] PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 @@ -451,59 +466,58 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x68 +.debug_aranges 0x00000000 0x90 *(.debug_aranges) .debug_aranges - 0x00000000 0x20 keys.o + 0x00000000 0x30 keys.o .debug_aranges - 0x00000020 0x28 main.o + 0x00000030 0x20 main.o .debug_aranges - 0x00000048 0x20 sevenseg.o + 0x00000050 0x40 sevenseg.o .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x8f2 +.debug_info 0x00000000 0x94d *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x5f4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o - .debug_info 0x000005f4 0x82 keys.o - .debug_info 0x00000676 0xe6 main.o - .debug_info 0x0000075c 0x196 sevenseg.o + .debug_info 0x000005f4 0xbf keys.o + .debug_info 0x000006b3 0xae main.o + .debug_info 0x00000761 0x1ec sevenseg.o -.debug_abbrev 0x00000000 0x797 +.debug_abbrev 0x00000000 0x799 *(.debug_abbrev) .debug_abbrev 0x00000000 0x5a2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o - .debug_abbrev 0x000005a2 0x4f keys.o - .debug_abbrev 0x000005f1 0xa5 main.o - .debug_abbrev 0x00000696 0x101 sevenseg.o + .debug_abbrev 0x000005a2 0x70 keys.o + .debug_abbrev 0x00000612 0x68 main.o + .debug_abbrev 0x0000067a 0x11f sevenseg.o -.debug_line 0x00000000 0x448 +.debug_line 0x00000000 0x432 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x133 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o - .debug_line 0x00000133 0xc3 keys.o - .debug_line 0x000001f6 0x107 main.o - .debug_line 0x000002fd 0x14b sevenseg.o + .debug_line 0x00000133 0x107 keys.o + .debug_line 0x0000023a 0x5f main.o + .debug_line 0x00000299 0x199 sevenseg.o -.debug_frame 0x00000000 0xac +.debug_frame 0x00000000 0x124 *(.debug_frame) - .debug_frame 0x00000000 0x24 keys.o - .debug_frame 0x00000024 0x48 main.o - .debug_frame 0x0000006c 0x40 sevenseg.o + .debug_frame 0x00000000 0x44 keys.o + .debug_frame 0x00000044 0x24 main.o + .debug_frame 0x00000068 0xbc sevenseg.o -.debug_str 0x00000000 0x41d +.debug_str 0x00000000 0x42d *(.debug_str) .debug_str 0x00000000 0x208 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o - .debug_str 0x00000208 0x160 keys.o - 0x194 (size before relaxing) - .debug_str 0x00000368 0x2a main.o - 0x1b2 (size before relaxing) - .debug_str 0x00000392 0x8b sevenseg.o + .debug_str 0x00000208 0x17b keys.o + 0x1af (size before relaxing) + .debug_str 0x00000383 0x19 main.o + 0x199 (size before relaxing) + .debug_str 0x0000039c 0x91 sevenseg.o 0x21c (size before relaxing) -.debug_loc 0x00000000 0x170 +.debug_loc 0x00000000 0x12f *(.debug_loc) - .debug_loc 0x00000000 0x49 main.o - .debug_loc 0x00000049 0x127 sevenseg.o + .debug_loc 0x00000000 0x12f sevenseg.o .debug_macinfo *(.debug_macinfo) @@ -523,11 +537,11 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x38 +.debug_ranges 0x00000000 0x60 *(.debug_ranges) - .debug_ranges 0x00000000 0x10 keys.o - .debug_ranges 0x00000010 0x18 main.o - .debug_ranges 0x00000028 0x10 sevenseg.o + .debug_ranges 0x00000000 0x20 keys.o + .debug_ranges 0x00000020 0x10 main.o + .debug_ranges 0x00000030 0x30 sevenseg.o .debug_macro *(.debug_macro) diff --git a/P4/P4/Debug/P4.srec b/P4/P4/Debug/P4.srec index aeb9e3c..d74857a 100644 --- a/P4/P4/Debug/P4.srec +++ b/P4/P4/Debug/P4.srec @@ -1,44 +1,55 @@ S00A000050342E7372656396 -S11300000C9434000C9451000C9451000C9467002F +S11300000C9434000C9451000C9451000C94C400D2 S11300100C9451000C9451000C9451000C94510018 S11300200C9451000C9451000C9451000C94510008 -S11300300C9451000C9451000C9451000C945100F8 +S11300300C9451000C9451000C947F000C945100CA S11300400C9451000C9451000C9451000C945100E8 S11300500C9451000C9451000C9451000C945100D8 S11300600C9451000C94510011241FBECFEFD8E022 -S1130070DEBFCDBF11E0A0E0B1E0E2E7F2E002C0F4 +S1130070DEBFCDBF11E0A0E0B1E0EEE2F3E002C0EC S113008005900D92A431B107D9F721E0A4E1B1E0C4 -S113009001C01D92A631B207E1F70E94A5000C949D -S11300A037010C9400008FEF8AB981E084B985B1DF -S11300B0866085B9F894E8E6F0E080818160808309 -S11300C0EBE6F0E0808186608083789408951F9247 -S11300D00F920FB60F9211248F939F93199916C004 -S11300E08091140190911501892B31F484E690E0FC -S11300F0909315018093140180911401909115013E -S11301000197909315018093140118C01A9916C091 -S113011080911401909115018336910531F48FEF8C -S11301209FEF909315018093140180911401909195 -S11301301501019690931501809314019F918F915D -S11301400F900FBE0F901F9018950E94530080913E -S11301501401909115010E94AE00F9CF0F931F93E3 -S1130160CF93DF93CDB7DEB768970FB6F894DEBFB1 -S11301700FBECDBF9C0184E1E0E0F1E0DE01119609 -S113018001900D928A95E1F70AE010E0C901B801E7 -S11301900E940F01FC01EE0FFF1F41E050E04C0FE5 -S11301A05D1FE40FF51F408151815E8B4D8BF9017A -S11301B0E81BF90BCF01B8010E940F01FB01EE0F00 -S11301C0FF1F41E050E04C0F5D1FE40FF51F8081DD -S11301D09181988F8F8B8D899E898BB98FE39CE950 -S11301E00197F1F700C0000095B181E0982795B917 -S11301F02F89388D2BB9EFE3FCE93197F1F700C073 -S1130200000095B1892785B968960FB6F894DEBFCA -S11302100FBECDBFDF91CF911F910F91089597FB32 -S1130220072E16F4009407D077FD09D00E9423010D -S113023007FC05D03EF4909581959F4F08957095E5 -S113024061957F4F0895AA1BBB1B51E107C0AA1FEC -S1130250BB1FA617B70710F0A61BB70B881F991F63 -S11302605A95A9F780959095BC01CD010895F8940D -S1050270FFCFBA -S1130272C000F900A4003000990092008200F80046 -S10702828000900064 +S113009001C01D92AA31B207E1F70E947A000C94C4 +S11300A095010C94000084B5826084BD85B583609D +S11300B085BD89EF87BDEEE6F0E0808182608083B4 +S11300C008958FEF8AB981E084B985B1866085B9D6 +S11300D0F894E8E6F0E0808181608083EBE6F0E06C +S11300E0808186608083789408950E9453000E94E2 +S11300F0610008950E9475000E940101FDCF1F92C6 +S11301000F920FB60F9211248F939F93AF93BF93C7 +S11301108091160190911701A0911801B0911901D5 +S11301200196A11DB11D8093160190931701A09310 +S11301301801B0931901BF91AF919F918F910F90C6 +S11301400FBE0F901F9018950F931F9300911601E7 +S1130150109117012091180130911901AB01BC01D4 +S1130160400F511F621F731F809116019091170158 +S1130170A0911801B091190184179507A607B70734 +S113018099F71F910F9108951F920F920FB60F9236 +S113019011248F939F93199915C080911401909104 +S11301A01501892B31F484E690E090931501809336 +S11301B014018091140190911501019790931501F8 +S11301C0809314011A9916C080911401909115011D +S11301D08336910531F48FEF9FEF9093150180934F +S11301E014018091140190911501019690931501C9 +S11301F0809314019F918F910F900FBE0F901F90C9 +S113020018951F93CF93DF93CDB7DEB768970FB6DA +S1130210F894DEBF0FBECDBF84E1E0E0F1E0DE0183 +S1130220119601900D928A95E1F7809114019091B5 +S113023015012AE030E0B9010E946D01FC01EE0FC6 +S1130240FF1F41E050E04C0F5D1FE40FF51F80815C +S113025091819E8B8D8BE0911401F0911501809119 +S1130260140190911501B9010E946D01AF01481B61 +S1130270590BCA01B9010E946D01FB01EE0FFF1F6A +S113028081E090E08C0F9D1FE80FF91F8081918120 +S1130290988F8F8B8D899E898BB96AE070E080E09E +S11302A090E00E94A40085B111E0812785B98F896F +S11302B0988D8BB96AE070E080E090E00E94A40021 +S11302C085B1182715B968960FB6F894DEBF0FBE2E +S11302D0CDBFDF91CF911F91089597FB072E16F4A0 +S11302E0009407D077FD09D00E94810107FC05D056 +S11302F03EF4909581959F4F0895709561957F4F39 +S11303000895AA1BBB1B51E107C0AA1FBB1FA61758 +S1130310B70710F0A61BB70B881F991F5A95A9F7AA +S111032080959095BC01CD010895F894FFCF0F +S113032EC000F900A4003000990092008200F80089 +S107033E80009000A7 S9030000FC diff --git a/P4/P4/Debug/keys.o b/P4/P4/Debug/keys.o index 5e9b0548c75f385043ae924f2b774b6ac044b135..775e8d66deed94ab2c1f8a1df407c494691fcf32 100644 GIT binary patch literal 3800 zcma)9U1%It6uvW)q-j%Q6K$Vx(#EfrLdwhD@f_@Gey0gF_vzUYgH2!c<7RYVG6t1lu5*6+J>Zgx^DddQvgou7No zxp&UJvw7;io%dUor3_hWL^UO)mUbvL1LGR)utF_Wi`9`chxQ&hH*@Cj-kEd9FC9B~ z@uy$UA2@hu?}5YZC!f3Y^x1>wkDQ%(_vqf4vwxhpplt_X`&px-K+`AMPj;SAilhDH zhlp(J=q)<&LXEHTu&p*~9X{+Q@8Q#Gr_f@zMsccadmbgbr8Q%j)SgN0T58o9EFFSQ z&hxHqi4qIVNGsbi&)eoGb&LvB8XVL%tIJy6d0mIod2{EUwk~VfT7)X?WvZiN6O>4? zL^+)U9rtuRa2+ZYJ<4wN)aHemrOWEJ1{b`r6)SJ^tgC3}9Y18LE~^g_R1b!1m(I_} zErM1EUm*PdFb4~@71v^0e|9cVXa+9b^1M}^Dh>Ek^;)?eRNe8Y5+?47>Hc*q{UEJ| z6+cNEV^Pgt@Adj=tyU>b1X1h<`|ADrQ7Ffa!W_LH#idGPEL3VT+@E+Q_F0mS;njH) z*^*lI!nz!LJ_>NG`E9vpi?ZfpgHT-NA&tNVJ_yIY30KIreN2a{kYY{h>YX z(1s1}T5pZl>lUhUVZ0I~6C3-8YlUPonkpbSq-v?L5pQ~}TPWY{79NHJUgSo+am+4^ zn`8wh%gdutIv$0Uu>?wZmC~pd7m`qO>c)aJ$jehfX%dm^jZzA0GEu9ig)qh@DYboQ zXuw^u<&oiHe-UAesJ*z`bYXF|x6bP;_N`yryE0piT7;gy46>B{)Ut)H{W_Wt?KDd~ zLV1}-DKB5`Nb#H)YEi#kHkjO*bBj{W4z2NVpyB1U$tWc5>7;O=loSU3-Ph)ilXbyu6y^ zsBU$yh}`>b)uMKY%)ReMy^o5_O1fFEG;^^yva7hGSX3J9%)sz{+cik5Q^k5%*7%9A zUK1gIq&03HV100zs#})Ko$Hq6a+fSz<0STj)s0&mo6gk{e+|A^@OJPUiP>zRz~ zuDigG6U!Q(5zKvmkr+N(!CxVkL-3klhCMBq`*cQdJGkB}X$x+Fso{EH7ZX{-QtBly zWfz!vUFs#*GRnZRgxNUE$C#YQd?pU35i^d?D{+{YF&XDsVhQ*jvD9!;e8AKxjN8QL zWx-q%*G@gdz9E=-P77u|9}`Q=PX)8y&jqvIuLQH5z7fng-wNh=|3NVK;3vUc*B`{P zuD=8`zKvd_o@ML3m1D-5%z9m5v;T}`iBAu))Z9xS*~9*v&%MNwcaT1kOL@uuY8s4! zr}d0a7?g(7sq%Q4D{nMOlt+b^KY=+-^Bj8huo7ezeIzq^jGwz=6pz;sQsZEBv>xtL zd2>(?;&O;gIz;An6;&mQLlXtXDz8+lRzrOG^7F>=YX`qk{wLiGKfHq3+jPwp^JpX8 zjzMgGdj6Z=o$z6={Fk48ckp9>k{FNg+>ptu?-wYI-!5SGfFa}e7!<_DZyH#Rf_622 zyqDN_gIbGP@l%+6w*-T8X=A%gV3;|8>JY{!1VYAEf}D@%B3=)SjK_U2@ls$j2T*N+ zFhw9_Y{wuQOw+p%*xQDTjrHX7?nJWP&@nHMgvt97u$cp>zK7rv2pQWc$oY7$BHj+@ z7>`$?iT4(;nFFXS8~;t@6b8O2a|Y=Ix`22;f-@e!v?ksMz?@^&*p9||+XN9C#m}zr zdmjP#9Wq28j<1Cq{RQ}KGXgmClD@gGhfuG_PaMs7`g*Ns9KYyl|0aZVm>O6sv lDU}>sF-tx8xpDx?8=&F$mGKr~AkCb3r_ppibcRg4zX8T2*319^ delta 1156 zcmZ8hOK1~O6umE#G%;z@G@r&Vj?m&PEH-Ghh>7zHWOq+;WTGlOnf8 zWG`IAlal0R<+x{VtlV16#)Bk2&OJ9~tZ!z9Wh=s1knfI)XMdV4u@7RMSj*(?yV!Vf zseY|?xqj)QTdOx@37^Sx4eL6^bSHaZes0kobr#mvoe={$`zyY~P^MtdXHxcX;)b3O5(9Mp^l%uC$9?5j3w^;(1JKDbdyg2D7Zz#-*tfFise>24rFUP<`n*~|6l|-SsAB>&(a9S%N@(Eag zg9c-~vLo=Q!VknVR2VwlGcsl?1Lf*TWTU#XI7se-y4*d-sJj4<>K;Ro3p%@^RX&h* z6AIin6?n9v!ZLVN;S7S0RA^q;Dj!ID0EMeSDsb&kA-Flj<8YdbU&j52Bq{x&Vp!L9 zI?oX4z{0xch``TkTI4qhx%tqzFpbZF+=tWR_*Y;Z8{|{q7#rnHL!xUQ>e}3*y_3z2 Z^`p$kdVG?c$yuDe0Un(-jr*M9tp7gbV=Mpw diff --git a/P4/P4/Debug/main.o b/P4/P4/Debug/main.o index 0bcd2e7299d0497256eb72d901e049539b94b89e..906aced8b61277db773b42f404c809d8821a7892 100644 GIT binary patch literal 2924 zcma)8-D@0G6u)<7o91I(n?yxzp(CcWqB}`UVr*>Mr0FNdv?NU)bY(i(Og2MyXT!{F zFd`I7rRbv-r9OzDpomCceG%V$@iBjaz80a+3ibE9bMNjnrr;qr=XXBtIp>}^_p&$6 z&tH&I3PVyXiH;=1KL>^Q2*z>ca6&vI21V&Jp_cgd2WTy2DX2|Fh4=Yq$u4Rw*-d6! z2f`>7mWAL@77k=Ale#mhTS-}1S&)-(Y1d_c>R9p)G|IINzGj%N&S9*coM86~*)NZk z2K(&N;nH$fzg(1uP?R+!`ua{oiLx|AjRjYpDcYr}zBl@g7cURqmc@QKAZL2NI9rs1 z$ouh4Df;CoV3#Y-6i*dz&y+HElyC$~cZC%x>NQ{={tk4O;0Z1HcL{Z7A4IzDuq#Bv z4N`4-SA@(Mqw)ErYg%x5GR!-f8F1#EbTmkI1D@^f2jd_+& zH0Jp}Cq}N9!N1JmZ#4cL{JR`hebAqr<(gb_@f0gvfOJsOn)9m?)@1xYcH(5%7gnsk43SvEK-Ag#S&4 z;mP}JZsz!&owSi&z#_IOfF9>}95yxE%IoodqpV#`AMbm_>xPl>*aH*qEnu?;P~6AbAkbuN*C88B(=`YV zfhJ?)?|^*Xdq_3}9rNduSv53E{2@0-2EOE6t7H2N)cFb3?}OM<{aJ#Xa~9 z87FY&CGnle*LUP#r+>W0raodbqkv)tem@gvGP%gr4=b(T#ir{}@|_*TVm$Vp-zFb# M9P_dOogowNUqC2WFaQ7m literal 4560 zcma)8ZD<_F8J^v}lVnLfMY5ebai}-cAv~?(-KfU%caz*f_T?#2VUj4_Mcp`Ec!nwTnWWV^ezTC9M$~cN+fR-?v`0uATq* z^2gfV8S$dlTwXuFKCm|M*1+1XwH+^%p5Kg0EHECgCTzQ#l3gg~ESGw6sYgmhIfK<@W=JT}+HM`jz>dke;M&#|XynL0Xz(6` z%W18`JAhVEE@%tK_HG`8-E9a?x3C7SdrDjToYKzH>8?R**18Rwv3HBUzDJ?Nu5K4j zX|nH;zT;c5JEg}oMNb^+&n@@%4_ZUkRM$&~k)kfo+SDK4`mB{3dttN?q5HY-Sz^!{ z1?(B?L_XAS_X@FPTyT{KZa&wVL!1omzUa*I^ZQZOwtyV@ephr(_&b*2<0 zeOvJ%#s3>~a0<4#1Q*--wA3q5;XD`1^Y(b6GU+cTty&T`-GzE1O5NeJ6Z`J-!>k!K z{4{G<>n(r3H{xflR->{Q)?+_hNhV}huEp*04SK&GR~qeVBt#RQUWMns6s@M-B2gNx zL~$C`l$2FbXTWl6McHq2tSu#Bp)bh3AHBUL@3$Fx`e^--;23O59jEnL993QHE)hpho_3Es{IEOjjd>$(xfz!i8ezJ4aFn=J zPM7M-<@t6EQnS)Nh*XTb<=R7T`Kxe9v+6;l1f$CfI%=6wO?keaE!3k%HH8vhm8{;1 z%V{Jzb=5EnO?f%2EFp5zu4J&Li>)LpM{&EEibgB0xq2R#cb1#m+z&O<=ktzj*d_wg zOy?t${^>MIQhzR72$%f1)wtDY)mCSc`by-VK6%{V>$!7LGfJ~4@yGX$j_h}*XAghH zKb3?_S$zp>LQw`CLs?%3;q0H<-S65zLDjj? zY2vM!E;&!z)1|^WXQotqxiDSox>Ph@$y?nhgy~R0d~&@b05~jdgB*2NwaS49U${rL z0^~F3M>(SNa41>6uM)F!1TKd`j_5Na+RbcG z#_cl5ky+kUIO4{PIbz$U5y%m@-z0Ar2b6~AF(eA&sFL{z3?f@kD4CImu%B5alktqd zev=&BBvyUB>AZsoMNmP^gTT#;L2%X~0UkQ1uQW zOvez59K`c;P;#tV`dg~J=);fgJ>a|_#H8(L#CKy6oW`ONL_bTF9`i<@*Wfd%a33(w zgZeLmpHTRp;ByMU03Yt1K7R%e72XOx_e=dXaORizhtRi)xjE1(8ZqnmJH!L%K+mAj z|0?(zvASZwAhz*=H;d; zzt%xLUT7hh#NqsW60N9sxvJ5s+#rWZ7}p{_XYO+gRihq9Ix3beFmbaP;g5hh^#cBu z;?Ly&O*`R8^foawZnKEtK-cAoBMbhvW=!m$D4;j zW7_EVA%P-odlIra?=t4~VdT90ccJIy{m^3o#p@7$N}x#Fo`$S3O;2EP$CVG6wlSyX zyzk;Zo`sI{GH-g`bznUPP`rqE!vu=7?MIN!cr&Xj=y<;a<`~XJdLIS* z3mpV9A={r6*M8@V`S%iPN!ssyNXBrn0l#C)hm7-*-a{jvLL*gi2=wFn_^(f|kKY-6 rhXBRT;P(-MB0U#5QqiFv6!8X>{5I)$%p+^ejQ9KQ{2Q$Y>UjSKIsOs? diff --git a/P4/P4/Debug/sevenseg.d b/P4/P4/Debug/sevenseg.d index 3a93be3..54fa8ed 100644 --- a/P4/P4/Debug/sevenseg.d +++ b/P4/P4/Debug/sevenseg.d @@ -5,6 +5,7 @@ sevenseg.d sevenseg.o: .././sevenseg.c .././sevenseg.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ @@ -28,6 +29,8 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h: +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: diff --git a/P4/P4/Debug/sevenseg.o b/P4/P4/Debug/sevenseg.o index dcbce7ed0c9f4fcd8c6168ae93e12bf21eac3501..ab66e692ed931b18bf1184053392f90455352651 100644 GIT binary patch literal 8092 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 IMohea1Mo+}`Tzg` diff --git a/P4/P4/keys.c b/P4/P4/keys.c index 93576a1..15df574 100644 --- a/P4/P4/keys.c +++ b/P4/P4/keys.c @@ -1,22 +1,34 @@ #include "keys.h" - -void init(){ - DDRD = 0xff; // Data direction register D (D0 -> D6) as output - // PORTD = 0xff; // setting bit for 7-segment show 0 - // => spielt keine Rolle, wird von der while Schleife übernommen - - DDRB = 0x01; // Data direction register B (B0) as output and DDRB (B1, B2) as input - PORTB |= (1 << PINB1) | (1 << PINB2) ; // setting bit for teens and SW1-2 - // PINB=0 => start with LED3 (Einer) - - // mit unserem Atmega nicht möglich, da keine PCINT8_vect und PCINT9_vect vorhanden - // DDRC = 0x00; // Data direction register C as input for SW1 and SW2 - // PORTC |= (1< PINC0 and SW2 -> PINC1 - - cli(); // clear global interrupt flag: interrupts will be immediately disabled - PCICR |= 0x01; // Pin Change Interrupt Control Register: turn on PortB - PCMSK0 |= (1 << PINB1) | (1 << PINB2); // trigger interrupt when SW1 or SW2 is pressed - sei(); // set global interrupt enable +void setupTimer0() { + // Configure Timer0 for CTC mode + TCCR0A |= (1 << WGM01); // Set Waveform Generation Mode bits for CTC + TCCR0B |= (1 << CS01) | (1 << CS00); // Set prescaler to 64 + OCR0A = 249; // Set Output Compare Register to 249 for ~1ms interrupt + TIMSK0 |= (1 << OCIE0A); // Enable Timer0 Output Compare A Match interrupt } +void setupRegisters(){ + DDRD = 0xff; // Data direction register D (D0 -> D6) as output + // PORTD = 0xff; // setting bit for 7-segment show 0 + // => spielt keine Rolle, wird von der while Schleife �bernommen + + DDRB = 0x01; // Data direction register B (B0) as output and DDRB (B1, B2) as input + PORTB |= (1 << PINB1) | (1 << PINB2) ; // setting bit for teens B0=0 and SW1-2 + // PINB=0 => start with LED3 (Einer) + + // mit unserem Atmega nicht m�glich, da keine PCINT8_vect und PCINT9_vect vorhanden + // DDRC = 0x00; // Data direction register C as input for SW1 and SW2 + // PORTC |= (1< PINC0 and SW2 -> PINC1 + + cli(); // clear global interrupt flag: interrupts will be immediately disabled + PCICR |= 0x01; // Pin Change Interrupt Control Register: turn on PortB + PCMSK0 |= (1 << PINB1) | (1 << PINB2); // trigger interrupt when SW1 or SW2 is pressed + sei(); // set global interrupt enable + +} + +void init(){ + setupTimer0(); + setupRegisters(); +} \ No newline at end of file diff --git a/P4/P4/keys.h b/P4/P4/keys.h index 5de2e71..89122b7 100644 --- a/P4/P4/keys.h +++ b/P4/P4/keys.h @@ -4,6 +4,8 @@ #include #include +void setupTimer0(); +void setupRegisters(); void init(); diff --git a/P4/P4/main.c b/P4/P4/main.c index 71eed60..e150c74 100644 --- a/P4/P4/main.c +++ b/P4/P4/main.c @@ -1,26 +1,11 @@ #include "keys.h" #include "sevenseg.h" -volatile int count = 0; - -ISR(PCINT0_vect) { // every 10ms interrupt is triggered - - if (!(PINB & (1< sw1 is pressed - if (count == 0) count = 100; // 100 - 1 = 99 - count--; - } - - if (!(PINB & (1< sw2 is pressed - if (count == 99) count = -1; // -1 + 1 = 0 - count++; - } -} - int main(void) { init(); while(1) { - display(count); + display(); } } diff --git a/P4/P4/sevenseg.c b/P4/P4/sevenseg.c index bb1cb53..1728c2f 100644 --- a/P4/P4/sevenseg.c +++ b/P4/P4/sevenseg.c @@ -1,6 +1,42 @@ #include "sevenseg.h" -void display(int count) { +//-Timer--------------------------------------- + +volatile uint32_t systemClock = 0; + +ISR(TIMER0_COMPA_vect) { + systemClock++; +} + +uint32_t getSystemClock(){ + return systemClock; +} + +void waitFor(uint32_t ms) { + uint32_t endTime = getSystemClock() + ms; + while (getSystemClock() != endTime); +} + +//-Counter------------------------------------- + +volatile int count = 0; + +ISR(PCINT0_vect) { // every 10ms interrupt is triggered + + if (!(PINB & (1< sw1 is pressed + if (count == 0) count = 100; // 100 - 1 = 99 + count--; + } + + if (!(PINB & (1< sw2 is pressed + if (count == 99) count = -1; // -1 + 1 = 0 + count++; + } +} + +//-Display-------------------------------------- + +void display() { /* logical 0: on logical 1: off @@ -20,14 +56,16 @@ void display(int count) { int numbersAsSegments[10] = { 192, 249, 164, 48, 153, 146, 130, 248, 128, 144 }; // display number from 0 to 9; - volatile int led_Einer = numbersAsSegments[(int) count % 10]; // Segmentanzeige für Zehner + volatile int led_Einer = numbersAsSegments[(int) count % 10]; // Segmentanzeige für Zehner volatile int led_Zehner = numbersAsSegments[(int) (count - (count % 10)) / 10]; // Segmentanzeige für Einer PORTD = led_Einer; - _delay_ms(10); + //_delay_ms(10); + waitFor(10); PORTB ^= (1 << PINB0); PORTD = led_Zehner; - _delay_ms(10); + //_delay_ms(10); + waitFor(10); PORTB ^= (1 << PINB0); } diff --git a/P4/P4/sevenseg.h b/P4/P4/sevenseg.h index e7dc30c..4645d8c 100644 --- a/P4/P4/sevenseg.h +++ b/P4/P4/sevenseg.h @@ -2,8 +2,11 @@ #define SEVENSEG_H_ #define F_CPU 16000000UL // 16MHz clock frequency #include +#include #include "avr/io.h" -void display(int count); +uint32_t getSystemClock(); +void waitFor(uint32_t ms); +void display(); #endif /* SEVENSEG_H_ */ \ No newline at end of file diff --git a/P5/.vscode/c_cpp_properties.json b/P5/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..ec932fb --- /dev/null +++ b/P5/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-msvc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "cl.exe", + "cStandard": "c11", + "cppStandard": "c++14", + "intelliSenseMode": "windows-msvc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/P5/.vscode/launch.json b/P5/.vscode/launch.json new file mode 100644 index 0000000..e082dc7 --- /dev/null +++ b/P5/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppvsdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "console": "externalTerminal", + "cwd": "c:/Users/Safak/SynologyDrive/UNI/3. Semester/53107 ARBK/Praktikumsunterlagen/ARBKVS-Praktika/P5", + "program": "c:/Users/Safak/SynologyDrive/UNI/3. Semester/53107 ARBK/Praktikumsunterlagen/ARBKVS-Praktika/P5/build/Debug/outDebug" + } + ] +} \ No newline at end of file diff --git a/P5/.vscode/settings.json b/P5/.vscode/settings.json new file mode 100644 index 0000000..9a126f5 --- /dev/null +++ b/P5/.vscode/settings.json @@ -0,0 +1,115 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "c++14", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": true, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false, + "files.associations": { + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "charconv": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "format": "cpp", + "initializer_list": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "iterator": "cpp", + "limits": "cpp", + "locale": "cpp", + "memory": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "thread": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "xfacet": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocbuf": "cpp", + "xlocinfo": "cpp", + "xlocmes": "cpp", + "xlocmon": "cpp", + "xlocnum": "cpp", + "xloctime": "cpp", + "xmemory": "cpp", + "xstring": "cpp", + "xtr1common": "cpp", + "xutility": "cpp" + } +} \ No newline at end of file diff --git a/P5/Main.cpp b/P5/Main.cpp new file mode 100644 index 0000000..5e8fec7 --- /dev/null +++ b/P5/Main.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include "Semaphore.h" +#include + +using namespace std; + +// Thread T1 - Schreibt alle Kleinbuchstaben des Alphabets +void thread1() { + for (char c = 'a'; c <= 'z'; ++c) { + cout << c << ' '; + } + cout << endl; +} + +// Thread T2 - Schreibt alle natürlichen Zahlen von 0 bis 32 +void thread2() { + for (int i = 0; i <= 32; ++i) { + cout << i << ' '; + } + cout << endl; +} + +// Thread T3 - Schreibt alle Großbuchstaben des Alphabets +void thread3() { + for (char c = 'A'; c <= 'Z'; ++c) { + cout << c << ' '; + } + cout << endl; +} + +void asynch_init(){ + // Start der Threads + thread t1(thread1); + thread t2(thread2); + thread t3(thread3); + + // Warten auf die Beendigung der Threads + t1.join(); + t2.join(); + t3.join(); +} + +mutex mtx; + +void mutexThread1() { + mtx.lock(); + + for (char ch = 'a'; ch <= 'z'; ch++) { + cout << ch << " "; + } + cout << endl; + + mtx.unlock(); +} + +void mutexThread2() { + + mtx.lock(); + + for (int i = 0; i < 33; i++) { + cout << i << " "; + } + cout << endl; + + mtx.unlock(); +} + +void mutexThread3() { + mtx.lock(); + + for (char ch = 'A'; ch <= 'Z'; ch++) { + cout << ch << " "; + } + cout << endl; + + mtx.unlock(); +} + +void mutex_init() { + thread t1(mutexThread1); // mutexThread1 is running + thread t2(mutexThread2); // mutexThread2 is running + thread t3(mutexThread3); // mutexThread3 is running + t1.join(); // main thread waits for t1 to finish + t2.join(); // main thread waits for t2 to finish + t3.join(); // main thread waits for t3 to finish +} + +Semaphore semaphore; + +void semaphoreThread1() { + semaphore.wait(); + for (char ch = 'a'; ch <= 'z'; ch++) { + cout << ch << " "; + } + cout << endl; + semaphore.post(); +} + +void semaphoreThread2() { + semaphore.wait(); + for (int i = 0; i < 33; i++) { + cout << i << " "; + } + cout << endl; + semaphore.post(); + +} + +void semaphoreThread3() { + semaphore.wait(); + for (char ch = 'A'; ch <= 'Z'; ch++) { + cout << ch << " "; + } + cout << endl; + semaphore.post(); + +} + +void semaphore_init() { + thread t1(semaphoreThread1); // thread1 is running + thread t2(semaphoreThread2); // thread2 is running + thread t3(semaphoreThread3); // thread3 is running + t1.join(); // main thread waits for t1 to finish + t2.join(); // main thread waits for t2 to finish + t3.join(); // main thread waits for t3 to finish +} + +int main() { + + cout << "Asynch" << endl; + asynch_init(); + + cout << "Mutex" << endl; + mutex_init(); + + cout << "Semaphore" << endl; + semaphore_init(); + + return 0; +} \ No newline at end of file diff --git a/P5/Semaphore.h b/P5/Semaphore.h new file mode 100644 index 0000000..d55117b --- /dev/null +++ b/P5/Semaphore.h @@ -0,0 +1,52 @@ +#ifndef MULTITHREADING_SEMAPHORE_H +#define MULTITHREADING_SEMAPHORE_H +#include +#include + +class Semaphore { +private: + std::mutex mtx; + std::condition_variable cv; + int signal; + +public: + Semaphore(int signal_ = 1) : signal(signal_) { } + + /** + * atomic function + */ + + inline void post() { + std::unique_lock lock(mtx); + signal++; + + //notify the waiting thread + //unblock(), waiting queue it not empty, wake up call thread from waiting queue + + cv.notify_one(); + + /** Notify one + * Unblocks one of the threads currently waiting for this condition. + * If no threads are waiting, the function does nothing. + */ + } + + /** + * atomic function + */ + + inline void wait() { + std::unique_lock lock(mtx); + if (signal <= 0) { + + // wait on the mutex until notify is called + // block(), put this thread into waiting status, sleep and put in waiting queue + cv.wait(lock); + } + if (signal > 0) { + signal--; + } + } + +}; +#endif //MULTITHREADING_SEMAPHORE_H