about to add border tracing, thick in the weeds
This commit is contained in:
parent
058f49254b
commit
7b1f043ac5
BIN
border_tracing_test.xcf
Normal file
BIN
border_tracing_test.xcf
Normal file
Binary file not shown.
BIN
border_tracing_visualized.xcf
Normal file
BIN
border_tracing_visualized.xcf
Normal file
Binary file not shown.
1
kicad/stm32card/#auto_saved_files#
Normal file
1
kicad/stm32card/#auto_saved_files#
Normal file
@ -0,0 +1 @@
|
||||
/home/indigo/projects/stm32_buisnesscard/kicad/stm32card/_autosave-stm32card.kicad_sch
|
12498
kicad/stm32card/_autosave-stm32card.kicad_sch
Normal file
12498
kicad/stm32card/_autosave-stm32card.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -164,7 +164,7 @@
|
||||
(net 39 "Net-(U1-SW)")
|
||||
(net 40 "unconnected-(U4-PB11-Pad22)")
|
||||
(net 41 "unconnected-(U4-PB3-Pad39)")
|
||||
(net 42 "unconnected-(U4-PB15-Pad28)")
|
||||
(net 42 "unconnected-(U4-PB10-Pad21)")
|
||||
(net 43 "unconnected-(U4-PD0-OSC_IN-Pad5)")
|
||||
(net 44 "unconnected-(U4-PB4-Pad40)")
|
||||
(net 45 "Net-(R10-Pad1)")
|
||||
@ -1554,12 +1554,13 @@
|
||||
(footprint "Package_TO_SOT_SMD:SOT-23"
|
||||
(layer "F.Cu")
|
||||
(uuid "2518d603-05ec-45f5-b810-40511013584b")
|
||||
(at 184.40183 107.755646)
|
||||
(at 159.273241 115.503476 180)
|
||||
(descr "SOT, 3 Pin (JEDEC TO-236 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=TO-236), generated with kicad-footprint-generator ipc_gullwing_generator.py")
|
||||
(tags "SOT TO_SOT_SMD")
|
||||
(property "Reference" "Q1"
|
||||
(at 0 -2.4 0)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "fce2c4d8-b23f-4b76-864e-54af29531ec1")
|
||||
(effects
|
||||
(font
|
||||
@ -1571,6 +1572,7 @@
|
||||
(property "Value" "AO3400A"
|
||||
(at 0 2.4 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "0b3f4ffa-e528-40a9-97fa-3cc91c0b2ad2")
|
||||
(effects
|
||||
(font
|
||||
@ -1609,24 +1611,14 @@
|
||||
(sheetfile "stm32card.kicad_sch")
|
||||
(attr smd)
|
||||
(fp_line
|
||||
(start 0 -1.56)
|
||||
(end -0.65 -1.56)
|
||||
(start 0 1.56)
|
||||
(end 0.65 1.56)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2b5048ba-809a-434e-b0f4-ba02947d6464")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -1.56)
|
||||
(end 0.65 -1.56)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0e870119-3b1f-41e9-b813-8dcbd3f632cb")
|
||||
(uuid "9c21a164-a516-4c80-80b9-38ddd69a7d7f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 1.56)
|
||||
@ -1639,14 +1631,24 @@
|
||||
(uuid "4c60d1da-e04a-42c2-b9d9-5e56e59fc40f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 1.56)
|
||||
(end 0.65 1.56)
|
||||
(start 0 -1.56)
|
||||
(end 0.65 -1.56)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9c21a164-a516-4c80-80b9-38ddd69a7d7f")
|
||||
(uuid "0e870119-3b1f-41e9-b813-8dcbd3f632cb")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -1.56)
|
||||
(end -0.65 -1.56)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2b5048ba-809a-434e-b0f4-ba02947d6464")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
@ -1672,34 +1674,14 @@
|
||||
(uuid "2c3e7d9d-1044-43f5-acac-fc3d891a3ecb")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.65 -1.125)
|
||||
(end -0.325 -1.45)
|
||||
(start 0.65 1.45)
|
||||
(end -0.65 1.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6a3f6376-4a4a-4240-92f8-36832ead3c32")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.65 1.45)
|
||||
(end -0.65 -1.125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "aa36c59c-98ca-4806-82b7-6e6d13a325f4")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.325 -1.45)
|
||||
(end 0.65 -1.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "2440cb88-c0c9-48fb-9cb1-48474d2cdd4e")
|
||||
(uuid "d434d20a-59c7-4610-bfbc-416f46375bbb")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.65 -1.45)
|
||||
@ -1712,14 +1694,34 @@
|
||||
(uuid "bc74b339-6e12-448e-8069-b412043c318f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.65 1.45)
|
||||
(end -0.65 1.45)
|
||||
(start -0.325 -1.45)
|
||||
(end 0.65 -1.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "d434d20a-59c7-4610-bfbc-416f46375bbb")
|
||||
(uuid "2440cb88-c0c9-48fb-9cb1-48474d2cdd4e")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.65 1.45)
|
||||
(end -0.65 -1.125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "aa36c59c-98ca-4806-82b7-6e6d13a325f4")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.65 -1.125)
|
||||
(end -0.325 -1.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6a3f6376-4a4a-4240-92f8-36832ead3c32")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 0 0)
|
||||
@ -1733,7 +1735,7 @@
|
||||
)
|
||||
)
|
||||
(pad "1" smd roundrect
|
||||
(at -0.9375 -0.95)
|
||||
(at -0.9375 -0.95 180)
|
||||
(size 1.475 0.6)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(roundrect_rratio 0.25)
|
||||
@ -1743,7 +1745,7 @@
|
||||
(uuid "ef84f103-7a72-4e51-b179-6de690d33df1")
|
||||
)
|
||||
(pad "2" smd roundrect
|
||||
(at -0.9375 0.95)
|
||||
(at -0.9375 0.95 180)
|
||||
(size 1.475 0.6)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(roundrect_rratio 0.25)
|
||||
@ -1753,7 +1755,7 @@
|
||||
(uuid "974a4e27-587c-4a22-9225-87b99ac158ca")
|
||||
)
|
||||
(pad "3" smd roundrect
|
||||
(at 0.9375 0)
|
||||
(at 0.9375 0 180)
|
||||
(size 1.475 0.6)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(roundrect_rratio 0.25)
|
||||
@ -6156,194 +6158,6 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(footprint "LOGO"
|
||||
(layer "F.Cu")
|
||||
(uuid "90e132f6-dfe8-4306-aee9-1a2c345dcedf")
|
||||
(at 139.84371 112.108205)
|
||||
(property "Reference" "G***"
|
||||
(at 0 0 0)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "bb536596-2ce2-481e-8f0a-5954bf5ca76d")
|
||||
(effects
|
||||
(font
|
||||
(size 1.5 1.5)
|
||||
(thickness 0.3)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "LOGO"
|
||||
(at 0.75 0 0)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "da169875-043a-4dc2-9a55-76a1464fe506")
|
||||
(effects
|
||||
(font
|
||||
(size 1.5 1.5)
|
||||
(thickness 0.3)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8555601d-9872-4c8b-accf-4a1891465380")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "99c7bf92-7cc7-4f63-9158-ee4410b43de0")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr board_only exclude_from_pos_files exclude_from_bom)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.510194 -4.738118) (xy -2.43064 -4.671599) (xy -2.385896 -4.617848) (xy -2.327166 -4.538602)
|
||||
(xy -2.289448 -4.483095) (xy -2.265143 -4.435879) (xy -2.246653 -4.381505) (xy -2.226379 -4.304527)
|
||||
(xy -2.220627 -4.281854) (xy -2.193293 -4.176056) (xy -2.164588 -4.067734) (xy -2.146934 -4.002866)
|
||||
(xy -2.123798 -3.910033) (xy -2.099615 -3.798584) (xy -2.085298 -3.723879) (xy -2.058721 -3.614411)
|
||||
(xy -2.018649 -3.492899) (xy -1.983922 -3.408501) (xy -1.891089 -3.212257) (xy -1.814514 -3.057726)
|
||||
(xy -1.752456 -2.941565) (xy -1.703171 -2.860431) (xy -1.684492 -2.83419) (xy -1.64679 -2.778644)
|
||||
(xy -1.62652 -2.736869) (xy -1.625406 -2.730307) (xy -1.61514 -2.697773) (xy -1.587761 -2.633832)
|
||||
(xy -1.548401 -2.550198) (xy -1.531731 -2.516415) (xy -1.484182 -2.417484) (xy -1.442017 -2.323099)
|
||||
(xy -1.412837 -2.250443) (xy -1.408613 -2.238154) (xy -1.380336 -2.174013) (xy -1.347849 -2.130805)
|
||||
(xy -1.341395 -2.126227) (xy -1.317837 -2.092516) (xy -1.288223 -2.018894) (xy -1.25458 -1.913291)
|
||||
(xy -1.218934 -1.783639) (xy -1.18331 -1.637868) (xy -1.149733 -1.483909) (xy -1.12023 -1.329694)
|
||||
(xy -1.096826 -1.183151) (xy -1.092646 -1.152341) (xy -1.068984 -1.002236) (xy -1.043106 -0.895579)
|
||||
(xy -1.015549 -0.834056) (xy -0.986849 -0.81935) (xy -0.986587 -0.819435) (xy -0.967707 -0.834094)
|
||||
(xy -0.952974 -0.867325) (xy -0.941933 -0.924117) (xy -0.934126 -1.009456) (xy -0.929099 -1.128331)
|
||||
(xy -0.926393 -1.28573) (xy -0.925554 -1.486618) (xy -0.924196 -1.624099) (xy 0.21207 -1.624099)
|
||||
(xy 0.212415 -1.513987) (xy 0.225541 -1.408812) (xy 0.245951 -1.338323) (xy 0.298917 -1.26795) (xy 0.379628 -1.224641)
|
||||
(xy 0.474149 -1.210629) (xy 0.568542 -1.228144) (xy 0.643901 -1.274595) (xy 0.691037 -1.337035)
|
||||
(xy 0.712183 -1.417128) (xy 0.710292 -1.483597) (xy 1.406902 -1.483597) (xy 1.419572 -1.366865)
|
||||
(xy 1.449856 -1.266696) (xy 1.459476 -1.247648) (xy 1.50156 -1.183491) (xy 1.547029 -1.148916) (xy 1.613291 -1.134186)
|
||||
(xy 1.668217 -1.130895) (xy 1.728649 -1.137722) (xy 1.772101 -1.171708) (xy 1.796545 -1.206925)
|
||||
(xy 1.829297 -1.27808) (xy 1.835454 -1.356242) (xy 1.83166 -1.394939) (xy 1.815784 -1.503581) (xy 1.798012 -1.576748)
|
||||
(xy 1.772805 -1.627348) (xy 1.73462 -1.66829) (xy 1.703609 -1.693258) (xy 1.613706 -1.743427) (xy 1.532581 -1.754055)
|
||||
(xy 1.46783 -1.725348) (xy 1.438303 -1.686056) (xy 1.412821 -1.596719) (xy 1.406902 -1.483597) (xy 0.710292 -1.483597)
|
||||
(xy 0.70911 -1.525173) (xy 0.69886 -1.593955) (xy 0.667286 -1.714997) (xy 0.618904 -1.794825) (xy 0.547274 -1.839626)
|
||||
(xy 0.445961 -1.855585) (xy 0.426264 -1.855875) (xy 0.345937 -1.853068) (xy 0.297645 -1.840593)
|
||||
(xy 0.265039 -1.812367) (xy 0.249222 -1.790009) (xy 0.224381 -1.721867) (xy 0.21207 -1.624099) (xy -0.924196 -1.624099)
|
||||
(xy -0.923821 -1.662025) (xy -0.919008 -1.85601) (xy -0.911567 -2.06096) (xy -0.901952 -2.269262)
|
||||
(xy -0.890616 -2.473301) (xy -0.878011 -2.665465) (xy -0.864591 -2.838138) (xy -0.850809 -2.983709)
|
||||
(xy -0.837117 -3.094563) (xy -0.82638 -3.153773) (xy -0.780362 -3.338177) (xy -0.74107 -3.476756)
|
||||
(xy -0.707741 -3.571623) (xy -0.679607 -3.624891) (xy -0.655906 -3.638672) (xy -0.651467 -3.636777)
|
||||
(xy -0.631937 -3.641862) (xy -0.630755 -3.649667) (xy -0.612501 -3.673269) (xy -0.565837 -3.672946)
|
||||
(xy -0.502914 -3.651404) (xy -0.43588 -3.611348) (xy -0.42658 -3.604196) (xy -0.352411 -3.538924)
|
||||
(xy -0.290947 -3.473367) (xy -0.251721 -3.418512) (xy -0.242598 -3.392111) (xy -0.230134 -3.360461)
|
||||
(xy -0.198975 -3.30663) (xy -0.186051 -3.286769) (xy -0.149728 -3.22366) (xy -0.104573 -3.132771)
|
||||
(xy -0.059181 -3.0316) (xy -0.05031 -3.010412) (xy 0.011035 -2.869598) (xy 0.064819 -2.766906) (xy 0.117108 -2.693893)
|
||||
(xy 0.173967 -2.642114) (xy 0.24146 -2.603126) (xy 0.242598 -2.602589) (xy 0.282785 -2.584571) (xy 0.320963 -2.571379)
|
||||
(xy 0.364736 -2.562561) (xy 0.421709 -2.557664) (xy 0.499487 -2.556235) (xy 0.605677 -2.557823)
|
||||
(xy 0.747882 -2.561973) (xy 0.861222 -2.565762) (xy 0.973401 -2.565824) (xy 1.089789 -2.560058)
|
||||
(xy 1.165721 -2.552199) (xy 1.300402 -2.53286) (xy 1.449304 -2.685628) (xy 1.507654 -2.750859) (xy 1.577366 -2.836937)
|
||||
(xy 1.652327 -2.935275) (xy 1.72642 -3.037287) (xy 1.793531 -3.134386) (xy 1.847545 -3.217985) (xy 1.882348 -3.279498)
|
||||
(xy 1.892263 -3.30765) (xy 1.911935 -3.328168) (xy 1.959323 -3.357343) (xy 2.016988 -3.386082) (xy 2.067491 -3.405292)
|
||||
(xy 2.085678 -3.408501) (xy 2.107774 -3.384945) (xy 2.121081 -3.315498) (xy 2.125567 -3.20199) (xy 2.121201 -3.046253)
|
||||
(xy 2.107953 -2.850119) (xy 2.097204 -2.729205) (xy 2.053602 -2.271154) (xy 2.10776 -2.081709) (xy 2.135263 -1.97471)
|
||||
(xy 2.157232 -1.869429) (xy 2.169296 -1.787055) (xy 2.169795 -1.780827) (xy 2.178967 -1.702027)
|
||||
(xy 2.195894 -1.597044) (xy 2.217139 -1.486905) (xy 2.220094 -1.47305) (xy 2.24358 -1.314469) (xy 2.243077 -1.155463)
|
||||
(xy 2.217406 -0.983938) (xy 2.165389 -0.787801) (xy 2.148002 -0.73311) (xy 2.119162 -0.640644) (xy 2.097537 -0.563357)
|
||||
(xy 2.086862 -0.514849) (xy 2.086342 -0.508619) (xy 2.070822 -0.450681) (xy 2.030186 -0.373329)
|
||||
(xy 1.973318 -0.29176) (xy 1.930828 -0.242599) (xy 1.875275 -0.171732) (xy 1.824811 -0.087316) (xy 1.815463 -0.067827)
|
||||
(xy 1.79042 -0.002657) (xy 1.781335 0.057008) (xy 1.786545 0.131786) (xy 1.794913 0.1869) (xy 1.81296 0.286846)
|
||||
(xy 1.83292 0.383715) (xy 1.845453 0.436675) (xy 1.869052 0.529413) (xy 1.892313 0.624061) (xy 1.893914 0.630754)
|
||||
(xy 1.914735 0.697215) (xy 1.950311 0.790832) (xy 1.994229 0.895101) (xy 2.011734 0.934001) (xy 2.073132 1.066467)
|
||||
(xy 2.138151 1.204576) (xy 2.201997 1.338352) (xy 2.259875 1.457819) (xy 2.30699 1.553) (xy 2.338195 1.613275)
|
||||
(xy 2.361383 1.65802) (xy 2.40038 1.73571) (xy 2.449849 1.835621) (xy 2.50445 1.947032) (xy 2.507317 1.952912)
|
||||
(xy 2.586487 2.112467) (xy 2.665964 2.267418) (xy 2.741995 2.410898) (xy 2.810826 2.536041) (xy 2.868703 2.635978)
|
||||
(xy 2.911874 2.703844) (xy 2.931221 2.728477) (xy 2.962308 2.771817) (xy 2.999373 2.839878) (xy 3.015363 2.874273)
|
||||
(xy 3.060617 2.962535) (xy 3.127925 3.075544) (xy 3.208673 3.20045) (xy 3.294249 3.3244) (xy 3.376037 3.434546)
|
||||
(xy 3.445423 3.518035) (xy 3.450701 3.523734) (xy 3.497654 3.562721) (xy 3.536348 3.578318) (xy 3.578722 3.591605)
|
||||
(xy 3.634724 3.623853) (xy 3.638501 3.626505) (xy 3.703518 3.666175) (xy 3.786055 3.708312) (xy 3.815921 3.721736)
|
||||
(xy 3.874945 3.749626) (xy 3.913721 3.779807) (xy 3.939475 3.824057) (xy 3.959429 3.894156) (xy 3.977742 3.98559)
|
||||
(xy 3.98894 4.152089) (xy 3.957999 4.300227) (xy 3.886799 4.425732) (xy 3.777221 4.524331) (xy 3.728169 4.552709)
|
||||
(xy 3.623733 4.5866) (xy 3.506995 4.59452) (xy 3.394775 4.577684) (xy 3.303891 4.537308) (xy 3.283061 4.520561)
|
||||
(xy 3.240239 4.48805) (xy 3.189891 4.471613) (xy 3.115186 4.467004) (xy 3.073068 4.467558) (xy 2.986597 4.466078)
|
||||
(xy 2.915773 4.458561) (xy 2.882599 4.449361) (xy 2.840784 4.406116) (xy 2.794363 4.322317) (xy 2.746761 4.205256)
|
||||
(xy 2.702246 4.06523) (xy 2.651685 3.931959) (xy 2.583487 3.834653) (xy 2.576757 3.827753) (xy 2.518373 3.756313)
|
||||
(xy 2.461426 3.666158) (xy 2.437899 3.619829) (xy 2.385164 3.525651) (xy 2.31718 3.431694) (xy 2.285135 3.395555)
|
||||
(xy 2.217925 3.316447) (xy 2.156525 3.227681) (xy 2.134855 3.189347) (xy 2.094768 3.126164) (xy 2.027759 3.037626)
|
||||
(xy 1.941412 2.932484) (xy 1.843311 2.819493) (xy 1.74104 2.707405) (xy 1.642183 2.604974) (xy 1.560805 2.526822)
|
||||
(xy 1.500662 2.462385) (xy 1.456728 2.397601) (xy 1.443202 2.364168) (xy 1.417281 2.308891) (xy 1.381174 2.279901)
|
||||
(xy 1.341315 2.252211) (xy 1.290505 2.197611) (xy 1.260395 2.157502) (xy 1.19465 2.080703) (xy 1.13572 2.051686)
|
||||
(xy 1.083104 2.070266) (xy 1.067431 2.086341) (xy 1.049152 2.115777) (xy 1.052093 2.122731) (xy 1.04974 2.138137)
|
||||
(xy 1.025412 2.17125) (xy 0.983125 2.208004) (xy 0.95287 2.21977) (xy 0.924197 2.23382) (xy 0.921872 2.242395)
|
||||
(xy 0.901963 2.267471) (xy 0.876881 2.2793) (xy 0.831766 2.305452) (xy 0.775772 2.352611) (xy 0.761647 2.366731)
|
||||
(xy 0.698923 2.419695) (xy 0.61411 2.475732) (xy 0.521683 2.52694) (xy 0.436121 2.565416) (xy 0.371901 2.583255)
|
||||
(xy 0.364259 2.583667) (xy 0.300634 2.59457) (xy 0.272593 2.605656) (xy 0.162494 2.647283) (xy 0.028634 2.674821)
|
||||
(xy -0.105155 2.683622) (xy -0.124 2.683027) (xy -0.204894 2.681779) (xy -0.254573 2.691232) (xy -0.290054 2.716776)
|
||||
(xy -0.312013 2.742589) (xy -0.343284 2.791442) (xy -0.358712 2.845277) (xy -0.35833 2.91452) (xy -0.342169 3.009599)
|
||||
(xy -0.313225 3.129512) (xy -0.286435 3.235542) (xy -0.261775 3.33701) (xy -0.244024 3.414198) (xy -0.242279 3.422338)
|
||||
(xy -0.218481 3.514619) (xy -0.188238 3.608003) (xy -0.18509 3.616417) (xy -0.16108 3.696833) (xy -0.136337 3.808359)
|
||||
(xy -0.113175 3.936408) (xy -0.093905 4.066396) (xy -0.08084 4.183738) (xy -0.076292 4.27385) (xy -0.077194 4.296929)
|
||||
(xy -0.09211 4.368983) (xy -0.126636 4.408407) (xy -0.139494 4.414969) (xy -0.181238 4.439899) (xy -0.194078 4.457423)
|
||||
(xy -0.213948 4.473586) (xy -0.232707 4.47593) (xy -0.278089 4.490174) (xy -0.332984 4.524424) (xy -0.333017 4.52445)
|
||||
(xy -0.383958 4.558368) (xy -0.421378 4.572958) (xy -0.421983 4.57297) (xy -0.455662 4.591351) (xy -0.476565 4.616684)
|
||||
(xy -0.515764 4.650023) (xy -0.581764 4.681793) (xy -0.609764 4.691107) (xy -0.694524 4.71592) (xy -0.773687 4.739457)
|
||||
(xy -0.790166 4.744432) (xy -0.864526 4.757288) (xy -0.968159 4.76325) (xy -1.084181 4.762671) (xy -1.195705 4.755906)
|
||||
(xy -1.285845 4.743308) (xy -1.322159 4.733283) (xy -1.375276 4.703451) (xy -1.402564 4.670245)
|
||||
(xy -1.40275 4.669463) (xy -1.423863 4.62887) (xy -1.465468 4.576067) (xy -1.472916 4.568039) (xy -1.522327 4.486028)
|
||||
(xy -1.548499 4.379565) (xy -1.548951 4.268055) (xy -1.523199 4.174919) (xy -1.456456 3.98269) (xy -1.430172 3.767419)
|
||||
(xy -1.444792 3.533501) (xy -1.453306 3.481279) (xy -1.496465 3.24496) (xy -1.534287 3.045694) (xy -1.569023 2.872611)
|
||||
(xy -1.602925 2.714843) (xy -1.638244 2.56152) (xy -1.675573 2.408427) (xy -1.703765 2.302757) (xy -1.729073 2.232112)
|
||||
(xy -1.757823 2.183879) (xy -1.79634 2.145445) (xy -1.814803 2.130824) (xy -1.896217 2.086397) (xy -1.98232 2.066975)
|
||||
(xy -2.057228 2.074533) (xy -2.093716 2.096141) (xy -2.134509 2.120346) (xy -2.148551 2.122731)
|
||||
(xy -2.188983 2.141441) (xy -2.25033 2.192522) (xy -2.325966 2.268397) (xy -2.409264 2.361493) (xy -2.493599 2.464232)
|
||||
(xy -2.572344 2.56904) (xy -2.638873 2.668342) (xy -2.665748 2.714031) (xy -2.718694 2.802539) (xy -2.774355 2.884474)
|
||||
(xy -2.814952 2.935434) (xy -2.864131 3.005855) (xy -2.896947 3.083093) (xy -2.899338 3.093122)
|
||||
(xy -2.916153 3.156873) (xy -2.934046 3.199737) (xy -2.935851 3.202291) (xy -2.948168 3.237934)
|
||||
(xy -2.962569 3.309251) (xy -2.977254 3.403553) (xy -2.990421 3.508152) (xy -3.000268 3.610359)
|
||||
(xy -3.004734 3.687487) (xy -3.016688 3.813085) (xy -3.042736 3.942284) (xy -3.079411 4.06614) (xy -3.123245 4.175709)
|
||||
(xy -3.170771 4.262048) (xy -3.218522 4.316212) (xy -3.253963 4.330372) (xy -3.283988 4.342932)
|
||||
(xy -3.337323 4.374563) (xy -3.362289 4.391021) (xy -3.467793 4.44054) (xy -3.577921 4.445965) (xy -3.699401 4.407244)
|
||||
(xy -3.736923 4.388181) (xy -3.816598 4.335623) (xy -3.877095 4.269378) (xy -3.92822 4.184642) (xy -3.967233 4.103793)
|
||||
(xy -3.994248 4.033183) (xy -4.002865 3.993046) (xy -3.99325 3.95313) (xy -3.966833 3.878645) (xy -3.927258 3.779023)
|
||||
(xy -3.878167 3.663696) (xy -3.858614 3.619585) (xy -3.804268 3.49458) (xy -3.755572 3.375697) (xy -3.717059 3.274489)
|
||||
(xy -3.693259 3.202513) (xy -3.689884 3.189332) (xy -3.636359 2.954629) (xy -3.591726 2.763973)
|
||||
(xy -3.555101 2.613886) (xy -3.525602 2.500889) (xy -3.502346 2.421505) (xy -3.484448 2.372255)
|
||||
(xy -3.479973 2.362801) (xy -3.455512 2.290155) (xy -3.444903 2.20842) (xy -3.44489 2.205983) (xy -3.427476 2.116383)
|
||||
(xy -3.375737 2.038245) (xy -3.325931 1.962053) (xy -3.293886 1.877312) (xy -3.291424 1.86468) (xy -3.265955 1.781008)
|
||||
(xy -3.223021 1.698326) (xy -3.215019 1.686863) (xy -3.164673 1.586953) (xy -3.153773 1.51608) (xy -3.142709 1.437547)
|
||||
(xy -3.115163 1.350251) (xy -3.105253 1.327886) (xy -3.075549 1.256958) (xy -3.058404 1.197728)
|
||||
(xy -3.056734 1.182623) (xy -3.046996 1.132227) (xy -3.037322 1.114737) (xy -3.019055 1.081192)
|
||||
(xy -2.990828 1.016798) (xy -2.962852 0.946131) (xy -2.898884 0.78837) (xy -2.837591 0.658839) (xy -2.782216 0.563781)
|
||||
(xy -2.736302 0.509681) (xy -2.709359 0.47643) (xy -2.669482 0.413739) (xy -2.627633 0.339449) (xy -2.579348 0.259698)
|
||||
(xy -2.53473 0.205401) (xy -2.506178 0.1871) (xy -2.465762 0.163783) (xy -2.417747 0.113819) (xy -2.402338 0.092969)
|
||||
(xy -2.341068 0.020894) (xy -2.267932 -0.043215) (xy -2.256332 -0.051287) (xy -2.18808 -0.108663)
|
||||
(xy -2.131396 -0.176225) (xy -2.124315 -0.187624) (xy -2.085828 -0.25146) (xy -2.033464 -0.334817)
|
||||
(xy -1.991686 -0.39951) (xy -1.946461 -0.472489) (xy -1.920591 -0.531276) (xy -1.908934 -0.594921)
|
||||
(xy -1.906349 -0.682477) (xy -1.90656 -0.714887) (xy -1.919744 -0.918325) (xy -1.953027 -1.137731)
|
||||
(xy -2.002292 -1.346419) (xy -2.024248 -1.427115) (xy -2.041643 -1.49828) (xy -2.045439 -1.516238)
|
||||
(xy -2.061531 -1.586543) (xy -2.089571 -1.695427) (xy -2.127465 -1.835026) (xy -2.173118 -1.997477)
|
||||
(xy -2.181182 -2.025693) (xy -2.34786 -2.677651) (xy -2.481164 -3.349252) (xy -2.577508 -4.021842)
|
||||
(xy -2.593973 -4.173835) (xy -2.608265 -4.290094) (xy -2.626019 -4.399407) (xy -2.644383 -4.485337)
|
||||
(xy -2.653229 -4.515331) (xy -2.678864 -4.626164) (xy -2.671294 -4.706192) (xy -2.636604 -4.753083)
|
||||
(xy -2.580876 -4.764502)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Cu")
|
||||
(uuid "1247a093-c056-4ae4-9d03-314ad661c142")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(footprint "Resistor_SMD:R_0603_1608Metric"
|
||||
(locked yes)
|
||||
(layer "F.Cu")
|
||||
@ -8193,7 +8007,7 @@
|
||||
(at 4.1 -1.25 90)
|
||||
(size 1.2 0.27)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(net 62 "backlight_fet")
|
||||
(net 42 "unconnected-(U4-PB10-Pad21)")
|
||||
(pinfunction "PB10")
|
||||
(pintype "unspecified")
|
||||
(uuid "7e9823b4-5e4f-4346-bd89-f93d913a0470")
|
||||
@ -8256,7 +8070,7 @@
|
||||
(at 1.25 -4.1 90)
|
||||
(size 0.27 1.2)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(net 42 "unconnected-(U4-PB15-Pad28)")
|
||||
(net 62 "backlight_fet")
|
||||
(pinfunction "PB15")
|
||||
(pintype "unspecified")
|
||||
(uuid "a069a5f1-68ad-46ff-86b9-7595c6f139b6")
|
||||
@ -25055,6 +24869,14 @@
|
||||
(net 1)
|
||||
(uuid "241c2dab-cd22-4d6a-89b6-22a5e33d2a5e")
|
||||
)
|
||||
(segment
|
||||
(start 166.658349 118.253643)
|
||||
(end 166.658349 117.969587)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 1)
|
||||
(uuid "283299db-74f2-4ee7-bfc3-193a57a4e2d8")
|
||||
)
|
||||
(segment
|
||||
(start 167.753529 90.00238)
|
||||
(end 169.66673 90.00238)
|
||||
@ -25287,14 +25109,6 @@
|
||||
(net 1)
|
||||
(uuid "81843990-5035-49e2-b547-16ce5caeefd9")
|
||||
)
|
||||
(segment
|
||||
(start 166.658349 118.253643)
|
||||
(end 165.351439 118.253643)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 1)
|
||||
(uuid "8bac4033-b5b2-4b91-bcb6-4ff7f70e7d23")
|
||||
)
|
||||
(segment
|
||||
(start 174.240878 125.643287)
|
||||
(end 173.978553 125.380962)
|
||||
@ -25319,6 +25133,14 @@
|
||||
(net 1)
|
||||
(uuid "986b5b66-720e-4c51-8152-6f4e81c554f3")
|
||||
)
|
||||
(segment
|
||||
(start 166.658349 117.969587)
|
||||
(end 167.264504 117.363432)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 1)
|
||||
(uuid "9bef231d-dec2-41b0-bffd-f832c3463e06")
|
||||
)
|
||||
(segment
|
||||
(start 183.488159 120.535261)
|
||||
(end 182.290644 120.535261)
|
||||
@ -25455,14 +25277,6 @@
|
||||
(net 1)
|
||||
(uuid "dddbfa09-71cb-41c3-a08f-b85a7bafd170")
|
||||
)
|
||||
(segment
|
||||
(start 165.351439 118.253643)
|
||||
(end 165.338703 118.240907)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 1)
|
||||
(uuid "dde48b5c-1003-4c3c-9a94-3c47cc6c40fd")
|
||||
)
|
||||
(segment
|
||||
(start 183.584442 122.41021)
|
||||
(end 182.194361 122.41021)
|
||||
@ -25851,7 +25665,7 @@
|
||||
(uuid "f183a198-88d5-4f90-bb01-a652fdebec66")
|
||||
)
|
||||
(via
|
||||
(at 165.338703 118.240907)
|
||||
(at 167.264504 117.363432)
|
||||
(size 0.6)
|
||||
(drill 0.3)
|
||||
(layers "F.Cu" "B.Cu")
|
||||
@ -25903,22 +25717,6 @@
|
||||
(net 2)
|
||||
(uuid "03834c81-0095-40b1-9c46-e9b6295fe263")
|
||||
)
|
||||
(segment
|
||||
(start 166.258642 116.553306)
|
||||
(end 163.966401 114.261065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "0ae1e4d8-ddbf-47c4-8a8a-17591ea25479")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 111.552065)
|
||||
(end 154.768188 111.060065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "0b556550-0145-4196-b78e-41d37f1c9610")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 113.2016)
|
||||
(end 154.768188 111.060065)
|
||||
@ -25959,6 +25757,14 @@
|
||||
(net 2)
|
||||
(uuid "0e4c310f-42a5-4020-bbb7-4ec7e3e78d0f")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 112.493656)
|
||||
(end 154.768188 111.060065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "10df18b1-1823-4450-8b8f-28b3ea010905")
|
||||
)
|
||||
(segment
|
||||
(start 169.68376 119.649239)
|
||||
(end 169.240878 119.206358)
|
||||
@ -25983,14 +25789,6 @@
|
||||
(net 2)
|
||||
(uuid "1faf8183-8850-48ce-a150-40e5ed902476")
|
||||
)
|
||||
(segment
|
||||
(start 174.559466 103.335534)
|
||||
(end 173.057466 103.335534)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "2764be3b-c99e-4c3e-bde5-9c5d83453732")
|
||||
)
|
||||
(segment
|
||||
(start 218.951133 113.132201)
|
||||
(end 220.177133 114.358201)
|
||||
@ -26015,6 +25813,14 @@
|
||||
(net 2)
|
||||
(uuid "345fd647-8060-4b6e-9a5a-1ccddfeb7547")
|
||||
)
|
||||
(segment
|
||||
(start 165.208812 115.503476)
|
||||
(end 158.335741 115.503476)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "34bae3ee-870c-41d7-a86a-447b7aca5942")
|
||||
)
|
||||
(segment
|
||||
(start 169.240878 118.284125)
|
||||
(end 168.238831 118.284125)
|
||||
@ -26039,14 +25845,6 @@
|
||||
(net 2)
|
||||
(uuid "3e9b01ba-0b30-4fb5-bdc7-73ed752d1648")
|
||||
)
|
||||
(segment
|
||||
(start 174.559466 103.335534)
|
||||
(end 201.621133 103.335534)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "4606ecea-7c40-4cfd-941a-b7e962d23c8b")
|
||||
)
|
||||
(segment
|
||||
(start 212.177133 105.891534)
|
||||
(end 212.177133 111.906201)
|
||||
@ -26071,6 +25869,14 @@
|
||||
(net 2)
|
||||
(uuid "4c595bcf-a167-4bb3-812e-5a824d57ca09")
|
||||
)
|
||||
(segment
|
||||
(start 202.951133 104.665534)
|
||||
(end 174.629466 104.665534)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "4c7fecd7-4cfb-4fa9-aa7d-6c0e643f1b83")
|
||||
)
|
||||
(segment
|
||||
(start 194.951133 113.132201)
|
||||
(end 202.951133 113.132201)
|
||||
@ -26087,6 +25893,14 @@
|
||||
(net 2)
|
||||
(uuid "59a56cfa-ff5a-4369-aee4-6bfc3241438f")
|
||||
)
|
||||
(segment
|
||||
(start 174.559466 104.735534)
|
||||
(end 173.057466 104.735534)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "60ac87e8-a1d3-4811-ac37-85c7e387b87a")
|
||||
)
|
||||
(segment
|
||||
(start 157.473188 106.860065)
|
||||
(end 155.860688 106.860065)
|
||||
@ -26103,6 +25917,22 @@
|
||||
(net 2)
|
||||
(uuid "66349c56-0e29-47f0-ba6b-b8d846e802ec")
|
||||
)
|
||||
(segment
|
||||
(start 165.621235 115.915899)
|
||||
(end 166.258642 116.553306)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "69aef433-6f57-4454-872b-76abf1a6455c")
|
||||
)
|
||||
(segment
|
||||
(start 165.621235 115.915899)
|
||||
(end 165.208812 115.503476)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "6b899ded-d509-4731-9696-7f270535c9d9")
|
||||
)
|
||||
(segment
|
||||
(start 174.740878 126.784125)
|
||||
(end 174.740878 123.650545)
|
||||
@ -26127,6 +25957,14 @@
|
||||
(net 2)
|
||||
(uuid "75be30e1-3b1e-4ea3-ad2e-de3c43073fad")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 111.060065)
|
||||
(end 154.768188 111.935923)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "79c595e2-3a80-4c6f-8b44-160f986db52c")
|
||||
)
|
||||
(segment
|
||||
(start 202.951133 104.665534)
|
||||
(end 210.951133 104.665534)
|
||||
@ -26143,6 +25981,22 @@
|
||||
(net 2)
|
||||
(uuid "802d5d8c-4487-4aaf-baa6-e055b6f5362e")
|
||||
)
|
||||
(segment
|
||||
(start 165.610084 115.92705)
|
||||
(end 165.621235 115.915899)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "82a4d107-aec8-4318-a670-8a75c0003514")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 111.935923)
|
||||
(end 158.335741 115.503476)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "84f75845-f44d-46a5-b604-15ca5039771c")
|
||||
)
|
||||
(segment
|
||||
(start 174.173724 128.478655)
|
||||
(end 174.740878 127.911501)
|
||||
@ -26151,22 +26005,6 @@
|
||||
(net 2)
|
||||
(uuid "86633816-49de-47b4-b383-27a00b420b7d")
|
||||
)
|
||||
(segment
|
||||
(start 154.768188 111.060065)
|
||||
(end 154.768188 112.310065)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "8b60d41f-3fdc-49bd-a41e-97067c40f190")
|
||||
)
|
||||
(segment
|
||||
(start 172.210188 104.182812)
|
||||
(end 172.210188 106.017278)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "8dcbddeb-9667-413c-a34d-110efece3d3c")
|
||||
)
|
||||
(segment
|
||||
(start 174.173724 128.478655)
|
||||
(end 174.319008 128.478655)
|
||||
@ -26175,14 +26013,6 @@
|
||||
(net 2)
|
||||
(uuid "90786260-dfaf-4b27-b599-2efb1a21d17c")
|
||||
)
|
||||
(segment
|
||||
(start 172.210188 105.484812)
|
||||
(end 172.210188 106.017278)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "92d84022-5acc-412a-b239-41e246caf52e")
|
||||
)
|
||||
(segment
|
||||
(start 199.11662 129.933381)
|
||||
(end 175.773734 129.933381)
|
||||
@ -26231,14 +26061,6 @@
|
||||
(net 2)
|
||||
(uuid "a6fa194f-9073-420a-a8ee-318b8c3b6a64")
|
||||
)
|
||||
(segment
|
||||
(start 174.559466 104.735534)
|
||||
(end 172.959466 104.735534)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "a9324303-59a0-41d5-a513-be81e9842960")
|
||||
)
|
||||
(segment
|
||||
(start 169.240878 117.180573)
|
||||
(end 168.613611 116.553306)
|
||||
@ -26272,28 +26094,12 @@
|
||||
(uuid "b011f6be-d219-4923-b240-1e1b40ec3930")
|
||||
)
|
||||
(segment
|
||||
(start 172.959466 104.735534)
|
||||
(end 172.210188 105.484812)
|
||||
(start 173.057466 104.735534)
|
||||
(end 165.208812 112.584188)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "b6bb591b-d56b-406c-82d4-c69e319a8335")
|
||||
)
|
||||
(segment
|
||||
(start 163.966401 114.261065)
|
||||
(end 157.477188 114.261065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "b6d95223-5406-42eb-b6ef-1e960384ec4f")
|
||||
)
|
||||
(segment
|
||||
(start 172.210188 106.017278)
|
||||
(end 163.966401 114.261065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "bac38b61-df5c-47ad-b5cd-aec43687fb16")
|
||||
(uuid "b8a9e12e-c709-441d-a41c-566bf64327bd")
|
||||
)
|
||||
(segment
|
||||
(start 153.498188 109.790065)
|
||||
@ -26311,6 +26117,22 @@
|
||||
(net 2)
|
||||
(uuid "bd079f40-841b-46dc-98c0-aef0e38e27c4")
|
||||
)
|
||||
(segment
|
||||
(start 165.208812 112.584188)
|
||||
(end 165.208812 115.503476)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "bdb98011-3b9c-4d97-bc8d-c49308b7b006")
|
||||
)
|
||||
(segment
|
||||
(start 174.629466 104.665534)
|
||||
(end 174.559466 104.735534)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "c0d65d2a-a4d6-43b0-ae84-107aa4ed0628")
|
||||
)
|
||||
(segment
|
||||
(start 146.357799 110.915534)
|
||||
(end 146.357799 102.915534)
|
||||
@ -26359,14 +26181,6 @@
|
||||
(net 2)
|
||||
(uuid "d60c7641-e943-410a-b11f-3db578a8eae0")
|
||||
)
|
||||
(segment
|
||||
(start 157.477188 114.261065)
|
||||
(end 154.768188 111.552065)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "d7fa6fd2-fd08-41ba-b86c-1e507a648f3e")
|
||||
)
|
||||
(segment
|
||||
(start 169.240878 118.284125)
|
||||
(end 169.240878 119.206358)
|
||||
@ -26407,22 +26221,6 @@
|
||||
(net 2)
|
||||
(uuid "e666a58c-5a79-4ac0-8cda-7886e00bbee5")
|
||||
)
|
||||
(segment
|
||||
(start 173.057466 103.335534)
|
||||
(end 172.210188 104.182812)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "f1c7b78c-52b3-4c41-b52d-3a6a5cd4daae")
|
||||
)
|
||||
(segment
|
||||
(start 201.621133 103.335534)
|
||||
(end 202.951133 104.665534)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 2)
|
||||
(uuid "f8169c98-9c13-459b-8ab1-7f061c71fe6a")
|
||||
)
|
||||
(segment
|
||||
(start 202.951133 126.098868)
|
||||
(end 210.951133 126.098868)
|
||||
@ -27280,12 +27078,28 @@
|
||||
(uuid "1219143e-78dc-4702-ae97-b317624f389e")
|
||||
)
|
||||
(segment
|
||||
(start 163.341804 117.129306)
|
||||
(end 155.935429 117.129306)
|
||||
(start 156.309173 117.50305)
|
||||
(end 152.037231 113.231108)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 25)
|
||||
(uuid "4091f1ad-f99c-410b-bfab-8a899dd98373")
|
||||
(uuid "26d2e6cc-17d1-4365-a55c-4bcd05d41df2")
|
||||
)
|
||||
(segment
|
||||
(start 165.996623 119.784125)
|
||||
(end 163.715548 117.50305)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 25)
|
||||
(uuid "40f2746f-7390-42c8-935c-5f05ad6cfbbf")
|
||||
)
|
||||
(segment
|
||||
(start 163.715548 117.50305)
|
||||
(end 156.309173 117.50305)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 25)
|
||||
(uuid "4d229c48-0ff8-4cb3-8049-f2bd3d047ccd")
|
||||
)
|
||||
(segment
|
||||
(start 152.037231 101.976085)
|
||||
@ -27295,14 +27109,6 @@
|
||||
(net 25)
|
||||
(uuid "4eb6f40d-fabb-413e-b451-c85575e97a20")
|
||||
)
|
||||
(segment
|
||||
(start 165.996623 119.784125)
|
||||
(end 163.341804 117.129306)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 25)
|
||||
(uuid "88bbea9a-e0c3-4b2b-8168-f94cf9695c0d")
|
||||
)
|
||||
(segment
|
||||
(start 151.444748 101.383602)
|
||||
(end 147.313909 101.383602)
|
||||
@ -27319,14 +27125,6 @@
|
||||
(net 25)
|
||||
(uuid "9c15adfb-634b-4f9f-8528-95fae93cd7bb")
|
||||
)
|
||||
(segment
|
||||
(start 155.935429 117.129306)
|
||||
(end 152.037231 113.231108)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 25)
|
||||
(uuid "a1ea3df5-caef-4cdb-bbb4-a6979714ad9e")
|
||||
)
|
||||
(segment
|
||||
(start 144.950255 97.524097)
|
||||
(end 144.950255 99.019948)
|
||||
@ -27343,6 +27141,30 @@
|
||||
(net 25)
|
||||
(uuid "ffc3663c-da28-4a55-b1bc-afc335d5f682")
|
||||
)
|
||||
(segment
|
||||
(start 173.057466 103.335534)
|
||||
(end 173.983466 103.335534)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 32)
|
||||
(uuid "6c5a2c69-59df-41de-b210-6ff05e64e890")
|
||||
)
|
||||
(segment
|
||||
(start 160.210741 114.553476)
|
||||
(end 161.839524 114.553476)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 32)
|
||||
(uuid "f66b29a8-9bf5-4a19-9467-70769b9fefe5")
|
||||
)
|
||||
(segment
|
||||
(start 161.839524 114.553476)
|
||||
(end 173.057466 103.335534)
|
||||
(width 0.5)
|
||||
(layer "F.Cu")
|
||||
(net 32)
|
||||
(uuid "f7a30b63-a13a-46e0-a975-668f2cdc7650")
|
||||
)
|
||||
(segment
|
||||
(start 173.307466 107.535534)
|
||||
(end 174.559466 107.535534)
|
||||
@ -27551,6 +27373,62 @@
|
||||
(net 61)
|
||||
(uuid "e51d7840-1c29-4e07-9ca6-3371114c25e5")
|
||||
)
|
||||
(segment
|
||||
(start 168.777878 121.284125)
|
||||
(end 167.890878 121.284125)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "44077575-7aad-41de-ae89-0f59025a8cf5")
|
||||
)
|
||||
(segment
|
||||
(start 163.597716 116.453476)
|
||||
(end 166.467365 119.323125)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "4e463f7e-705d-43b0-b1ab-6d33dd1c782e")
|
||||
)
|
||||
(segment
|
||||
(start 166.467365 119.323125)
|
||||
(end 168.719835 119.323125)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "501f9b39-96d3-4e25-8ba7-edaeb557a44f")
|
||||
)
|
||||
(segment
|
||||
(start 168.719835 119.323125)
|
||||
(end 169.23276 119.83605)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "67fefe55-844e-44b6-b515-cbcaeb80d9b8")
|
||||
)
|
||||
(segment
|
||||
(start 160.210741 116.453476)
|
||||
(end 163.597716 116.453476)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "abe754a0-9398-4ee7-a082-f662052efb4d")
|
||||
)
|
||||
(segment
|
||||
(start 169.23276 120.829243)
|
||||
(end 168.777878 121.284125)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "ae7127cc-5e7f-402b-9890-fbb02a22c94a")
|
||||
)
|
||||
(segment
|
||||
(start 169.23276 119.83605)
|
||||
(end 169.23276 120.829243)
|
||||
(width 0.25)
|
||||
(layer "F.Cu")
|
||||
(net 62)
|
||||
(uuid "c432c430-a203-47b3-86e0-fc37d9167ea8")
|
||||
)
|
||||
(zone
|
||||
(net 1)
|
||||
(net_name "GND")
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "",
|
||||
"active_layer": 2,
|
||||
"active_layer_preset": "Back Layers",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
@ -48,7 +48,7 @@
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "00000000_00000000_00000008_82082227",
|
||||
"visible_layers": "00000000_00000000_00000002_2200888c",
|
||||
"zone_display_mode": 1
|
||||
},
|
||||
"git": {
|
||||
|
@ -5020,22 +5020,22 @@
|
||||
)
|
||||
(global_label "backlight_fet"
|
||||
(shape input)
|
||||
(at 144.78 86.36 180)
|
||||
(at 187.96 86.36 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify right)
|
||||
(justify left)
|
||||
)
|
||||
(uuid "0ce962d2-d7a6-4fbc-ac94-cf81640d341f")
|
||||
(property "Intersheetrefs" "${INTERSHEET_REFS}"
|
||||
(at 129.5788 86.36 0)
|
||||
(at 203.1612 86.36 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify right)
|
||||
(justify left)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,22 +1,197 @@
|
||||
ptype render_mandelbrot:cam
|
||||
ptype render_mandelbrot:camera
|
||||
set draw_mandelbrot:cam
|
||||
set draw_mandelbrot()::cam
|
||||
draw_mandelbrot()::cam
|
||||
print $3
|
||||
ptype $3
|
||||
bruh = 1
|
||||
set bruh = 1
|
||||
set $bruh = 1
|
||||
set $bruh = {
|
||||
min_r = -1,
|
||||
min_i = -0.5,
|
||||
max_r = 1,
|
||||
max_i = 0.5
|
||||
}
|
||||
set $bruh = {1, 2, 3, 4}
|
||||
bruh
|
||||
print $bruh
|
||||
set draw_mandelbrot()::cam
|
||||
set draw_mandelbrot()::cam = $bruh
|
||||
set draw_mandelbrot()::cam.min_r = -2
|
||||
set draw_mandelbrot()::cam
|
||||
set draw_mandelbrot()::cam = 0
|
||||
set draw_mandelbrot()::cam = {0}
|
||||
print $bruh
|
||||
print draw_mandelbrot()::cam
|
||||
print draw_mandelbrot()::cam
|
||||
set draw_mandelbrot()::cam = {
|
||||
min_r = 0,
|
||||
min_i = 0,
|
||||
max_r = 0,
|
||||
max_i = 0
|
||||
}
|
||||
set draw_mandelbrot()::cam = {0, 0, 0, 0}
|
||||
set draw_mandelbrot()::cam = {0, 1, 2, 3}
|
||||
print draw_mandelbrot()::cam
|
||||
bruh
|
||||
print $bruh
|
||||
set draw_mandelbrot()::cam = bruh
|
||||
set draw_mandelbrot()::cam = $bruh
|
||||
set bruh = draw_mandelbrot()::cam
|
||||
set $bruh = draw_mandelbrot()::cam
|
||||
print $bruh
|
||||
set draw_mandelbrot()::cam = $bruh
|
||||
bruh = { asdf = 0 }
|
||||
set $bruh = { asdf = 0 }
|
||||
set $bruh = { min_r = 0 }
|
||||
print bruh
|
||||
print bruh
|
||||
print $bruh
|
||||
bruh.min_r
|
||||
set $bruh.min_r = 1
|
||||
set #bruh
|
||||
print $bruh
|
||||
set draw_mandelbrot()::cam = $bruh
|
||||
print draw_mandelbrot()::cam
|
||||
print $bruh[0]
|
||||
print $bruh
|
||||
set $bruh = {$bruh, $bruh}
|
||||
bruh
|
||||
print $bruh
|
||||
print $bruh[0]
|
||||
print $bruh[1]
|
||||
load
|
||||
c
|
||||
print wait_time
|
||||
c
|
||||
print draw_mandelbrot()::cam
|
||||
set $asdf = {
|
||||
min_r = -1,
|
||||
min_i = -0.5,
|
||||
max_r = 1,
|
||||
max_i = 0.5
|
||||
}
|
||||
set $bruh = {
|
||||
min_r = -1,
|
||||
min_i = -0.5,
|
||||
max_r = 1,
|
||||
max_i = 0.5
|
||||
}
|
||||
set $bruh[0] = {
|
||||
min_r = -1,
|
||||
min_i = -0.5,
|
||||
max_r = 1,
|
||||
max_i = 0.5
|
||||
}
|
||||
set $bruh[0] = {
|
||||
.min_r = -1,
|
||||
min_i = -0.5,
|
||||
max_r = 1,
|
||||
max_i = 0.5
|
||||
}
|
||||
print camera
|
||||
print *cam
|
||||
print draw_mandelbrot()::cam
|
||||
c
|
||||
quit
|
||||
d
|
||||
c
|
||||
quit
|
||||
c
|
||||
quit
|
||||
c
|
||||
load
|
||||
c
|
||||
print *cam
|
||||
print draw_mandelbrot()::cam
|
||||
x
|
||||
c
|
||||
print draw_mandelbrot()::cam
|
||||
c
|
||||
load
|
||||
c
|
||||
print draw_mandelbrot()::cam
|
||||
printf "%1.20f\n" draw_mandelbrot()::cam
|
||||
printf "%1.20f\n", draw_mandelbrot()::cam.min_i
|
||||
printf "%1.20f\n", draw_mandelbrot()::cam.max_r
|
||||
print 3
|
||||
print -1.4054856689592869e-05
|
||||
for
|
||||
while
|
||||
exit
|
||||
quit
|
||||
len(vi
|
||||
len(vi)
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
command render_mandelbrot(0xff)
|
||||
c
|
||||
command render_mandelbrot(0xff)
|
||||
c
|
||||
quit
|
||||
c
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
print render_mandelbrot
|
||||
quit
|
||||
quit
|
||||
c
|
||||
set draw_mandelbrot()::view_mode 0
|
||||
set draw_mandelbrot()::view_mode = 0
|
||||
quit
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
context
|
||||
c
|
||||
print time
|
||||
b st7735.c:104
|
||||
c
|
||||
quit
|
||||
disp benchmark_stop:time
|
||||
disp benchmark_stop.time
|
||||
disp benchmark_stop()::time
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
exit
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
c
|
||||
c
|
||||
load
|
||||
quit
|
||||
c
|
||||
load
|
||||
load
|
||||
exit
|
||||
load
|
||||
c
|
||||
quit
|
||||
b st7735.c:102
|
||||
quit
|
||||
quit
|
||||
quit
|
||||
load
|
||||
c
|
||||
b mandelbrot.c:102
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
load
|
||||
c
|
||||
quit
|
||||
info b
|
||||
b render_mandelbrot
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
@ -25,232 +200,57 @@ c
|
||||
c
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
print time
|
||||
quit
|
||||
load
|
||||
c
|
||||
print time
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
quit
|
||||
reload
|
||||
load
|
||||
b render_mandelbrot
|
||||
c
|
||||
context
|
||||
quit
|
||||
quit
|
||||
load
|
||||
c
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
f 2
|
||||
f 4
|
||||
f 5
|
||||
next
|
||||
context
|
||||
f 6
|
||||
p sizeof(bool)
|
||||
p sizeof(uint16_t)
|
||||
context
|
||||
f 5
|
||||
print bruh
|
||||
print &bruh
|
||||
print &framebuffer
|
||||
context
|
||||
quit
|
||||
load
|
||||
c
|
||||
f 2
|
||||
f 3
|
||||
context
|
||||
quit
|
||||
load
|
||||
context
|
||||
c
|
||||
p time
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
quit
|
||||
c
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
c
|
||||
load
|
||||
c
|
||||
quit
|
||||
quit
|
||||
load
|
||||
c
|
||||
b st7735.c:320
|
||||
b ST7735.c:320
|
||||
b ST7735.c:320
|
||||
c
|
||||
load
|
||||
c
|
||||
quit
|
||||
b ST7735.c:320
|
||||
load
|
||||
c
|
||||
c
|
||||
c
|
||||
p time
|
||||
b ST7735_DrawImage
|
||||
c
|
||||
p x
|
||||
p y
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
b ST7735_DrawImage
|
||||
c
|
||||
p x
|
||||
x y
|
||||
p y
|
||||
p x
|
||||
c
|
||||
f 4
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
load
|
||||
b ST7735_DrawImage
|
||||
c
|
||||
p x
|
||||
p y
|
||||
c
|
||||
p x
|
||||
p y
|
||||
p h
|
||||
p y
|
||||
p h
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
c
|
||||
f 2
|
||||
f 1
|
||||
print &framebuffer
|
||||
context
|
||||
p &view_mode
|
||||
print bottom_buffered
|
||||
print &bottom_buffered
|
||||
print &bottom_buffered
|
||||
print &view_mode
|
||||
f 0
|
||||
print bruh
|
||||
print &bruh
|
||||
print &bruh
|
||||
exit
|
||||
load
|
||||
quit
|
||||
quit
|
||||
c
|
||||
quit
|
||||
c
|
||||
b render_mandelbrot
|
||||
c
|
||||
c
|
||||
d
|
||||
b 80012d0
|
||||
b 0x80012d0
|
||||
b *0x80012d0
|
||||
c
|
||||
next
|
||||
next
|
||||
quit
|
||||
load
|
||||
reg
|
||||
p _sbss
|
||||
p (uintptr_32)_sbss
|
||||
p/x_sbss
|
||||
p/x _sbss
|
||||
p (void *)_sbss
|
||||
p (void)_sbss
|
||||
p (void *)&_sbss
|
||||
p (void *)&__bss_start__
|
||||
p sp
|
||||
reg
|
||||
c
|
||||
p itme
|
||||
p time
|
||||
d
|
||||
c
|
||||
c
|
||||
print uwTick
|
||||
c
|
||||
print tickstart
|
||||
print wait
|
||||
quit
|
||||
load
|
||||
c
|
||||
c
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
quit
|
||||
load
|
||||
c
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
quitr
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
c
|
||||
load
|
||||
c
|
||||
c
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
c
|
||||
p itme
|
||||
p time
|
||||
quit
|
||||
load
|
||||
c
|
||||
p time
|
||||
quit
|
||||
c
|
||||
qquit
|
||||
quit
|
||||
load
|
||||
c
|
||||
p itme
|
||||
p time
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
load
|
||||
c
|
||||
p itme
|
||||
p time
|
||||
quit
|
||||
load
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
quit
|
||||
c
|
||||
load
|
||||
c
|
||||
b 153
|
||||
b mandelbrot.c:153
|
||||
c
|
||||
p colorscheme
|
||||
quit
|
||||
load
|
||||
c
|
||||
quit
|
||||
|
@ -2,14 +2,6 @@
|
||||
#include <signal.h>
|
||||
#include "main.h"
|
||||
|
||||
static float time __attribute__((used));
|
||||
|
||||
__attribute__((always_inline)) void static inline benchmark_start() {
|
||||
TIM4->CNT = 0;
|
||||
TIM4->CR1 |= TIM_CR1_CEN;
|
||||
}
|
||||
__attribute__((always_inline)) void static inline benchmark_stop() {
|
||||
TIM4->CR1 ^= TIM_CR1_CEN;
|
||||
time = (float)(TIM4->CNT + 1) * (TIM4->PSC + 1) / HAL_RCC_GetSysClockFreq();
|
||||
__BKPT();
|
||||
}
|
||||
void benchmark_start();
|
||||
void benchmark_stop();
|
||||
|
@ -31,7 +31,6 @@ extern "C" {
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
@ -59,6 +58,14 @@ void Error_Handler(void);
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
#define GPIO_BUTTON_REG GPIOB
|
||||
#define BUTTON_UP GPIO_PIN_3
|
||||
#define BUTTON_RIGHT GPIO_PIN_2
|
||||
#define BUTTON_DOWN GPIO_PIN_0
|
||||
#define BUTTON_LEFT GPIO_PIN_1
|
||||
#define BUTTON_A GPIO_PIN_13
|
||||
#define BUTTON_B GPIO_PIN_14
|
||||
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
|
@ -9,16 +9,3 @@ enum states {
|
||||
};
|
||||
|
||||
void draw_mandelbrot(int key_pressed);
|
||||
/** the interrupt handler should read the pin pressed, then translate it into one of these.
|
||||
* Ensures that if we have to change pins, adjustments are easy.
|
||||
*/
|
||||
enum buttons {
|
||||
KEYCODE_UP,
|
||||
KEYCODE_RIGHT,
|
||||
KEYCODE_DOWN,
|
||||
KEYCODE_LEFT,
|
||||
KEYCODE_A,
|
||||
KEYCODE_B,
|
||||
//we need to call the function once during boot
|
||||
KEYCODE_NONE = 0xff
|
||||
};
|
||||
|
16
program/stm32f1_buisnesscard_v1/Core/Src/benchmark.c
Normal file
16
program/stm32f1_buisnesscard_v1/Core/Src/benchmark.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <signal.h>
|
||||
#include "main.h"
|
||||
|
||||
static float time __attribute__((used));
|
||||
|
||||
void benchmark_start() {
|
||||
TIM4->CNT = 0;
|
||||
TIM4->CR1 |= TIM_CR1_CEN;
|
||||
}
|
||||
void benchmark_stop() {
|
||||
TIM4->CR1 ^= TIM_CR1_CEN;
|
||||
time = (float)(TIM4->CNT + 1) * (TIM4->PSC + 1) / HAL_RCC_GetSysClockFreq();
|
||||
BENCHMARK_CHECKTIME:
|
||||
__NOP();
|
||||
// __BKPT();
|
||||
}
|
@ -70,13 +70,6 @@ static void MX_TIM4_Init(void);
|
||||
//when idling, vreg stop mode, low power mode stop
|
||||
//when sleeping, vreg stop mode, low power mode standby (RTC alarm)
|
||||
|
||||
#define GPIO_UP GPIO_PIN_3
|
||||
#define GPIO_RIGHT GPIO_PIN_1
|
||||
#define GPIO_DOWN GPIO_PIN_0
|
||||
#define GPIO_LEFT GPIO_PIN_2
|
||||
#define GPIO_A GPIO_PIN_13
|
||||
#define GPIO_B GPIO_PIN_14
|
||||
#define GPIO_BUTTON_REG GPIOB
|
||||
|
||||
bool button_event;
|
||||
|
||||
@ -85,35 +78,12 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
|
||||
button_event = false;
|
||||
}
|
||||
|
||||
int button_pressed = KEYCODE_NONE;
|
||||
int button_pressed = 0;
|
||||
bool button_event;
|
||||
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t pin) {
|
||||
button_event = true;
|
||||
//we can write "modules" that don't need to know the specific pins to know hwat button was pressed
|
||||
//(idk why I felt I needed to do this)
|
||||
switch(pin) {
|
||||
case GPIO_UP:
|
||||
button_pressed = KEYCODE_UP;
|
||||
break;
|
||||
case GPIO_RIGHT:
|
||||
button_pressed = KEYCODE_RIGHT;
|
||||
break;
|
||||
case GPIO_DOWN:
|
||||
button_pressed = KEYCODE_DOWN;
|
||||
break;
|
||||
case GPIO_LEFT:
|
||||
button_pressed = KEYCODE_LEFT;
|
||||
break;
|
||||
case GPIO_A:
|
||||
button_pressed = KEYCODE_A;
|
||||
break;
|
||||
case GPIO_B:
|
||||
button_pressed = KEYCODE_B;
|
||||
break;
|
||||
default:
|
||||
button_pressed = KEYCODE_NONE;
|
||||
}
|
||||
button_pressed = pin;
|
||||
}
|
||||
/* USER CODE END 0 */
|
||||
|
||||
@ -133,7 +103,7 @@ int main(void)
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
|
||||
/* USER CODE BEGIN Init */
|
||||
/* USE CODE BEGIN Init */
|
||||
|
||||
/* USER CODE END Init */
|
||||
|
||||
@ -155,31 +125,22 @@ int main(void)
|
||||
//ST7735_FillScreenFast(ST7735_MAGENTA);
|
||||
|
||||
//HAL_GPIO_EXTI_Callback(0xff);
|
||||
benchmark_start();
|
||||
draw_mandelbrot(button_pressed);
|
||||
benchmark_stop();
|
||||
BENCHMARK_INIT: //for benchmarking gdb script
|
||||
HAL_SuspendTick();
|
||||
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
||||
|
||||
|
||||
|
||||
//HAL_SuspendTick();
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
/**
|
||||
ST7735_sleep();
|
||||
HAL_SuspendTick();
|
||||
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
|
||||
**/
|
||||
|
||||
//we'll clean everything up later
|
||||
while (1)
|
||||
{
|
||||
//later we'll impliment menu
|
||||
if(button_event) {
|
||||
button_event = false;
|
||||
HAL_ResumeTick();
|
||||
HAL_TIM_Base_Stop_IT(&htim2);
|
||||
draw_mandelbrot(button_pressed);
|
||||
HAL_TIM_Base_Stop_IT(&htim2);
|
||||
HAL_SuspendTick();
|
||||
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
||||
HAL_TIM_Base_Start_IT(&htim2);
|
||||
@ -187,7 +148,7 @@ int main(void)
|
||||
HAL_ResumeTick();
|
||||
}
|
||||
else { //zzzzz
|
||||
ST7735_sleep();
|
||||
//ST7735_sleep();
|
||||
HAL_SuspendTick();
|
||||
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
|
||||
SystemClock_Config();
|
||||
|
@ -1,7 +1,9 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include "mandelbrot.h"
|
||||
#include "st7735.h"
|
||||
#include "benchmark.h"
|
||||
#include "main.h"
|
||||
|
||||
#define RES_X 160
|
||||
#define RES_Y 80
|
||||
@ -10,7 +12,7 @@
|
||||
#define STEP_SIZE .1
|
||||
#define ZOOM_SIZE .1
|
||||
|
||||
#define DECIMAL_LOC 28 //TODO see if you can optimize without DSP module
|
||||
#define DECIMAL_LOC 28
|
||||
#define DOUBLE_SCALER (1 << DECIMAL_LOC)
|
||||
#define DOUBLE_TO_FIXED(val) (int32_t)((val) * DOUBLE_SCALER)
|
||||
#define FIXED_MULTIPLY(x,y) ((((uint64_t)(x))*(y)) >> DECIMAL_LOC)
|
||||
@ -31,6 +33,14 @@
|
||||
#define CAM_DEF_MIN_R -1
|
||||
#define CAM_DEF_MAX_R 1
|
||||
|
||||
//set controls
|
||||
#define CAM_MOVE_UP BUTTON_UP
|
||||
#define CAM_MOVE_RIGHT BUTTON_RIGHT
|
||||
#define CAM_MOVE_DOWN BUTTON_DOWN
|
||||
#define CAM_MOVE_LEFT BUTTON_LEFT
|
||||
#define CAM_ZOOM_IN BUTTON_A
|
||||
#define CAM_ZOOM_OUT BUTTON_B
|
||||
|
||||
struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
@ -75,18 +85,32 @@ void cam_zoom(struct camera *cam, double zoom) {
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
//TODO look into border tracing; this is too slow
|
||||
void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct camera cam, bool half) {
|
||||
|
||||
//TODO look into border tracing; this is too slow. Change name
|
||||
//
|
||||
void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct camera cam, int x0, int y0, int w, int h) {
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(half ? ((cam.max_i - cam.min_i) / 2) + cam.min_i : (cam.max_i));
|
||||
int32_t c_r, z_i, z_r, zn_r;
|
||||
int32_t z_r_2, z_i_2;
|
||||
int32_t c_i = DOUBLE_TO_FIXED((((cam.max_i - cam.min_i) * (RES_Y - y0)) / RES_Y) + cam.min_i);
|
||||
int32_t c_r0 = DOUBLE_TO_FIXED((((cam.max_r - cam.min_r) * x0) / RES_X) + cam.min_r);
|
||||
int32_t c_r, z_i, z_r, zn_r, z_r_2, z_i_2;
|
||||
size_t fb_index = 0;
|
||||
int i;
|
||||
for(int y = 0; y < (RES_Y/2); y++) {
|
||||
c_r = DOUBLE_TO_FIXED(cam.min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
|
||||
/**
|
||||
bool bruh[RES_X * (RES_Y/2)];
|
||||
for(size_t i = 0; i < sizeof(bruh) / sizeof(bruh[0]); i++) {
|
||||
bruh[i] = i % 1;
|
||||
}
|
||||
for(size_t i = sizeof(bruh) / sizeof(bruh[0]); i > 0; i--) {
|
||||
framebuffer[i] = bruh[i];
|
||||
}
|
||||
**/
|
||||
|
||||
|
||||
for(int y = y0; y < y0 + h; y++) {
|
||||
c_r = c_r0;
|
||||
for(int x = x0; x < x0 + w; x++) {
|
||||
z_i = 0;
|
||||
z_r = 0;
|
||||
for(i = 0; i < ITERS; i++) {
|
||||
@ -95,7 +119,6 @@ void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct came
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + c_r;
|
||||
|
||||
//z_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + c_i;
|
||||
z_i = (FIXED_MULTIPLY(z_r, z_i) << 1) + c_i;
|
||||
|
||||
z_r = zn_r;
|
||||
@ -103,7 +126,6 @@ void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct came
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) break;
|
||||
}
|
||||
framebuffer[fb_index++] = colorscheme[i];
|
||||
// ST7735_DrawPixel(x, y, colorscheme[i]);
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
@ -112,49 +134,97 @@ void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct came
|
||||
|
||||
|
||||
|
||||
#define FB_SIZE_X RES_X
|
||||
#define FB_SIZE_Y RES_Y/2
|
||||
|
||||
//TODO rename
|
||||
void draw_mandelbrot(int key_pressed) {
|
||||
uint16_t framebuffer[(RES_X * RES_Y) / 2];
|
||||
static uint16_t framebuffer[FB_SIZE_X * FB_SIZE_Y];
|
||||
uint16_t columnbuffer[8*RES_Y];
|
||||
static bool bottom_buffered = true;
|
||||
//program flow is awful atm becuase I was planning something different; will be improved soon.
|
||||
static struct camera cam = {
|
||||
.min_r = CAM_DEF_MIN_R,
|
||||
.max_r = CAM_DEF_MAX_R,
|
||||
.min_i = ((double)RES_Y / RES_X) * CAM_DEF_MIN_R,
|
||||
.max_i = ((double)RES_Y / RES_X) * CAM_DEF_MAX_R,
|
||||
|
||||
};
|
||||
static int view_mode = VIEW_UNINIT;
|
||||
static uint16_t colorscheme[ITERS];
|
||||
|
||||
|
||||
|
||||
//yes, I know the following is disgusting. Before I clean it, I just wanna get the general idea out,
|
||||
//it's more efficient in that order
|
||||
//TODO once you get your idea ironed out, clean the code and improve the flow
|
||||
benchmark_start();
|
||||
if(view_mode == VIEW_UNINIT) {
|
||||
view_mode = VIEW_MANDREL;
|
||||
init_colorscheme_mandrel(colorscheme);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, 0, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, 0, RES_X, (RES_Y / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, RES_Y/2, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, (RES_Y / 2), RES_X, (RES_Y / 2), framebuffer);
|
||||
bottom_buffered = true;
|
||||
}
|
||||
else {
|
||||
const int y_offset = STEP_SIZE * RES_Y;
|
||||
const int x_offset = STEP_SIZE * RES_X;
|
||||
const size_t bottom_space = RES_X * ((RES_Y/2) - y_offset) * sizeof(uint16_t);
|
||||
uint16_t top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
switch(key_pressed) {
|
||||
case BUTTON_UP:
|
||||
cam_shift(&cam, 0, STEP_SIZE);
|
||||
memmove(framebuffer + (RES_X * y_offset), framebuffer, bottom_space);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_DOWN:
|
||||
uint16_t bottom_line = (bottom_buffered ? RES_Y : (RES_Y/2)) - y_offset;
|
||||
cam_shift(&cam, 0, -STEP_SIZE);
|
||||
memmove(framebuffer, framebuffer + (RES_X * y_offset), bottom_space);
|
||||
render_mandelbrot(framebuffer + (RES_X*((RES_Y/2)-y_offset)), colorscheme, cam, 0, bottom_line, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_RIGHT:
|
||||
cam_shift(&cam, STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, RES_X - x_offset, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y), framebuffer + (RES_X * y) + x_offset, (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y) + (RES_X - x_offset), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_LEFT:
|
||||
cam_shift(&cam, -STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, 0, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y) + x_offset, framebuffer + (RES_X * y), (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_A:
|
||||
cam_zoom(&cam, ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
case BUTTON_B:
|
||||
cam_zoom(&cam, -ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
default:
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
}
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
|
||||
switch(key_pressed) {
|
||||
case KEYCODE_UP:
|
||||
cam_shift(&cam, 0, STEP_SIZE);
|
||||
break;
|
||||
case KEYCODE_DOWN:
|
||||
cam_shift(&cam, 0, -STEP_SIZE);
|
||||
break;
|
||||
case KEYCODE_RIGHT:
|
||||
cam_shift(&cam, -STEP_SIZE, 0);
|
||||
break;
|
||||
case KEYCODE_LEFT:
|
||||
cam_shift(&cam, STEP_SIZE, 0);
|
||||
break;
|
||||
case KEYCODE_A:
|
||||
cam_zoom(&cam, ZOOM_SIZE);
|
||||
break;
|
||||
case KEYCODE_B:
|
||||
cam_zoom(&cam, -ZOOM_SIZE);
|
||||
break;
|
||||
default:
|
||||
bottom_buffered = !bottom_buffered;
|
||||
top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
}
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, false);
|
||||
benchmark_stop();
|
||||
|
||||
/**
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, false, key_pressed);
|
||||
ST7735_DrawImage(0, 0, ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, true);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, true, key_pressed);
|
||||
ST7735_DrawImage(0, (ST7735_HEIGHT / 2), ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
**/
|
||||
// ST7735_DrawImage(0, 0, ST7735_WIDTH - 1, ST7735_HEIGHT - 1, (uint16_t *)0x80000000);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
##########################################################################################################################
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.5.0-RC5] date: [Sat May 10 22:32:07 CDT 2025]
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.5.0-RC5] date: [Tue May 13 23:21:12 CDT 2025]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
@ -37,7 +37,14 @@ BUILD_DIR = build
|
||||
# C sources
|
||||
C_SOURCES = \
|
||||
Core/Src/main.c \
|
||||
Core/Src/benchmark.c \
|
||||
Core/Src/stm32f1xx_it.c \
|
||||
Core/Src/system_stm32f1xx.c \
|
||||
Core/Src/sysmem.c \
|
||||
Core/Src/syscalls.c \
|
||||
Core/Src/st7735.c \
|
||||
Core/Src/fonts.c \
|
||||
Core/Src/mandelbrot.c \
|
||||
Core/Src/stm32f1xx_hal_msp.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c \
|
||||
@ -51,14 +58,8 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c \
|
||||
Core/Src/system_stm32f1xx.c \
|
||||
Core/Src/sysmem.c \
|
||||
Core/Src/syscalls.c \
|
||||
Core/Src/st7735.c \
|
||||
Core/Src/fonts.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \
|
||||
Core/Src/mandelbrot.c
|
||||
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c
|
||||
|
||||
# ASM sources
|
||||
ASM_SOURCES = \
|
||||
@ -109,8 +110,8 @@ AS_DEFS =
|
||||
|
||||
# C defines
|
||||
C_DEFS = \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32F103xB
|
||||
-DSTM32F103xB \
|
||||
-DUSE_HAL_DRIVER
|
||||
|
||||
|
||||
# AS includes
|
||||
@ -120,9 +121,9 @@ AS_INCLUDES =
|
||||
C_INCLUDES = \
|
||||
-ICore/Inc \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \
|
||||
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
|
||||
-IDrivers/CMSIS/Include
|
||||
-IDrivers/CMSIS/Include \
|
||||
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy
|
||||
|
||||
|
||||
# compile gcc flags
|
||||
@ -148,7 +149,7 @@ LDSCRIPT = stm32f103c8tx_flash.ld
|
||||
# libraries
|
||||
LIBS = -lc -lm -lnosys
|
||||
LIBDIR =
|
||||
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
|
||||
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections -Xlinker --print-memory-usage
|
||||
|
||||
# default action: build all
|
||||
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
|
||||
|
236
program/stm32f1_buisnesscard_v1/backup
Normal file
236
program/stm32f1_buisnesscard_v1/backup
Normal file
@ -0,0 +1,236 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include "mandelbrot.h"
|
||||
#include "st7735.h"
|
||||
#include "benchmark.h"
|
||||
#include "main.h"
|
||||
|
||||
#define RES_X 160
|
||||
#define RES_Y 80
|
||||
#define DEFAULT_CENTER_X 0
|
||||
#define DEFAULT_CENTER_Y 0
|
||||
#define STEP_SIZE .1
|
||||
#define ZOOM_SIZE .1
|
||||
|
||||
#define DECIMAL_LOC 28
|
||||
#define DOUBLE_SCALER (1 << DECIMAL_LOC)
|
||||
#define DOUBLE_TO_FIXED(val) (int32_t)((val) * DOUBLE_SCALER)
|
||||
#define FIXED_MULTIPLY(x,y) ((((uint64_t)(x))*(y)) >> DECIMAL_LOC)
|
||||
#define FIXED_TO_DOUBLE(val) ((val) / (double)DOUBLE_SCALER)
|
||||
|
||||
#define INFTY 2
|
||||
#define INFTY_SQR INFTY * INFTY
|
||||
#define ITERS 255
|
||||
#define INFTY_SQR_FIXED DOUBLE_TO_FIXED(INFTY_SQR)
|
||||
|
||||
//TODO move to some hardware.h or somethin
|
||||
//channel order: B, G, R
|
||||
#define R_BITS 5
|
||||
#define G_BITS 6
|
||||
#define B_BITS 5
|
||||
|
||||
//imaginary axis set automatically
|
||||
#define CAM_DEF_MIN_R -1
|
||||
#define CAM_DEF_MAX_R 1
|
||||
|
||||
//set controls
|
||||
#define CAM_MOVE_UP BUTTON_UP
|
||||
#define CAM_MOVE_RIGHT BUTTON_RIGHT
|
||||
#define CAM_MOVE_DOWN BUTTON_DOWN
|
||||
#define CAM_MOVE_LEFT BUTTON_LEFT
|
||||
#define CAM_ZOOM_IN BUTTON_A
|
||||
#define CAM_ZOOM_OUT BUTTON_B
|
||||
|
||||
struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
|
||||
enum VIEW_MODES { VIEW_UNINIT, VIEW_MANDREL, VIEW_SHIP };
|
||||
|
||||
void init_colorscheme_mandrel(uint16_t *scheme) {
|
||||
uint16_t *tc = scheme;
|
||||
for(unsigned int i = 0; i < ITERS; i++) {
|
||||
if((i == 0) || (i == ITERS)) *tc = 0;
|
||||
else if(i < 128) *tc = (((((i - 64) << 2)+0x1f) & 0x1f) | (((((i - 128) << 1)+0x1f) & 0x1f) << (5+6)));
|
||||
else *tc = (-2*(i - 128)+0x1f) & 0xff;
|
||||
*tc = (*tc << 8) | (*tc >> 8); //convert to little endian
|
||||
tc++;
|
||||
}
|
||||
}
|
||||
|
||||
void init_colorscheme_ship(uint16_t *scheme) {
|
||||
uint16_t *tc = scheme;
|
||||
for(unsigned int i = 0; i < ITERS; i++) {
|
||||
if((i == 0) || (i == ITERS)) *tc = 0;
|
||||
else *tc = (((i - (128)) << 1)+0x1f) << (5+6);
|
||||
tc++;
|
||||
}
|
||||
}
|
||||
|
||||
void cam_shift(struct camera *cam, double step_r, double step_i) {
|
||||
double i_offset = (cam->max_i - cam->min_i) * step_i;
|
||||
double r_offset = (cam->max_r - cam->min_r) * step_r;
|
||||
cam->min_i += i_offset;
|
||||
cam->max_i += i_offset;
|
||||
cam->min_r += r_offset;
|
||||
cam->max_r += r_offset;
|
||||
}
|
||||
|
||||
void cam_zoom(struct camera *cam, double zoom) {
|
||||
double i_scale = (cam->max_i - cam->min_i) * zoom;
|
||||
double r_scale = (cam->max_r - cam->min_r) * zoom;
|
||||
cam->min_i += i_scale;
|
||||
cam->max_i -= i_scale;
|
||||
cam->min_r += r_scale;
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
|
||||
//TODO look into border tracing; this is too slow. Change name
|
||||
//
|
||||
void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct camera cam, int x0, int y0, int w, int h) {
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED((((cam.max_i - cam.min_i) * (RES_Y - y0)) / RES_Y) + cam.min_i);
|
||||
int32_t c_r0 = DOUBLE_TO_FIXED((((cam.max_r - cam.min_r) * x0) / RES_X) + cam.min_r);
|
||||
int32_t c_r, z_i, z_r, zn_r, z_r_2, z_i_2;
|
||||
size_t fb_index = 0;
|
||||
int i;
|
||||
|
||||
//for(;;);
|
||||
|
||||
for(int y = y0; y < y0 + h; y++) {
|
||||
c_r = c_r0;
|
||||
for(int x = x0; x < x0 + w; x++) {
|
||||
z_i = 0;
|
||||
z_r = 0;
|
||||
for(i = 0; i < ITERS; i++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + c_r;
|
||||
|
||||
//z_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + c_i;
|
||||
z_i = (FIXED_MULTIPLY(z_r, z_i) << 1) + c_i;
|
||||
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) break;
|
||||
}
|
||||
framebuffer[fb_index++] = colorscheme[i];
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define FB_SIZE_X RES_X
|
||||
#define FB_SIZE_Y RES_Y/2
|
||||
|
||||
//TODO rename
|
||||
void draw_mandelbrot(int key_pressed) {
|
||||
static uint16_t framebuffer[FB_SIZE_X * FB_SIZE_Y];
|
||||
uint16_t columnbuffer[8*RES_Y];
|
||||
static bool bottom_buffered = true;
|
||||
//program flow is awful atm becuase I was planning something different; will be improved soon.
|
||||
static struct camera cam = {
|
||||
.min_r = CAM_DEF_MIN_R,
|
||||
.max_r = CAM_DEF_MAX_R,
|
||||
.min_i = ((double)RES_Y / RES_X) * CAM_DEF_MIN_R,
|
||||
.max_i = ((double)RES_Y / RES_X) * CAM_DEF_MAX_R,
|
||||
|
||||
};
|
||||
static int view_mode = VIEW_UNINIT;
|
||||
static uint16_t colorscheme[ITERS];
|
||||
|
||||
|
||||
|
||||
//we could get rid of this and do some awful bitbashing lol
|
||||
//but for readability, we shant
|
||||
//TODO camera moves l/r more then u/d for some reason
|
||||
/**
|
||||
if(key_pressed & CAM_MOVE_UP) cam_shift(&cam, 0, STEP_SIZE);
|
||||
if(key_pressed & CAM_MOVE_DOWN) cam_shift(&cam, 0, -STEP_SIZE);
|
||||
if(key_pressed & CAM_MOVE_RIGHT) cam_shift(&cam, -STEP_SIZE, 0);
|
||||
if(key_pressed & CAM_MOVE_LEFT) cam_shift(&cam, STEP_SIZE, 0);
|
||||
if(key_pressed & CAM_ZOOM_IN) cam_zoom(&cam, ZOOM_SIZE);
|
||||
if(key_pressed & CAM_ZOOM_OUT) cam_zoom(&cam, -ZOOM_SIZE);
|
||||
**/
|
||||
|
||||
//yes, I know the following is disgusting. Before I clean it, I just wanna get the general idea out,
|
||||
//it's more efficient in that order
|
||||
//TODO once you get your idea ironed out, clean the code and improve the flow
|
||||
benchmark_start();
|
||||
if(view_mode == VIEW_UNINIT) {
|
||||
view_mode = VIEW_MANDREL;
|
||||
init_colorscheme_mandrel(colorscheme);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, 0, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, 0, RES_X, (RES_Y / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, RES_Y/2, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, (RES_Y / 2), RES_X, (RES_Y / 2), framebuffer);
|
||||
bottom_buffered = true;
|
||||
}
|
||||
else {
|
||||
const int y_offset = STEP_SIZE * RES_Y;
|
||||
const int x_offset = STEP_SIZE * RES_X;
|
||||
const size_t bottom_space = RES_X * ((RES_Y/2) - y_offset) * sizeof(uint16_t);
|
||||
uint16_t top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
switch(key_pressed) {
|
||||
case BUTTON_UP:
|
||||
cam_shift(&cam, 0, STEP_SIZE);
|
||||
memmove(framebuffer + (RES_X * y_offset), framebuffer, bottom_space);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_DOWN:
|
||||
uint16_t bottom_line = (bottom_buffered ? RES_Y : (RES_Y/2)) - y_offset;
|
||||
cam_shift(&cam, 0, -STEP_SIZE);
|
||||
memmove(framebuffer, framebuffer + (RES_X * y_offset), bottom_space);
|
||||
render_mandelbrot(framebuffer + (RES_X*((RES_Y/2)-y_offset)), colorscheme, cam, 0, bottom_line, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_RIGHT:
|
||||
cam_shift(&cam, STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, RES_X - x_offset, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y), framebuffer + (RES_X * y) + x_offset, (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y) + (RES_X - x_offset), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_LEFT:
|
||||
cam_shift(&cam, -STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, 0, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y) + x_offset, framebuffer + (RES_X * y), (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_A:
|
||||
cam_zoom(&cam, ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
case BUTTON_B:
|
||||
cam_zoom(&cam, -ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
default:
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
}
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
|
||||
bottom_buffered = !bottom_buffered;
|
||||
top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
}
|
||||
benchmark_stop();
|
||||
|
||||
|
||||
/**
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, false, key_pressed);
|
||||
ST7735_DrawImage(0, 0, ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, true, key_pressed);
|
||||
ST7735_DrawImage(0, (ST7735_HEIGHT / 2), ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
**/
|
||||
// ST7735_DrawImage(0, 0, ST7735_WIDTH - 1, ST7735_HEIGHT - 1, (uint16_t *)0x80000000);
|
||||
}
|
52
program/stm32f1_buisnesscard_v1/benchmark.gdb
Normal file
52
program/stm32f1_buisnesscard_v1/benchmark.gdb
Normal file
@ -0,0 +1,52 @@
|
||||
file build/stm32f1_buisnesscard_v1.elf
|
||||
target extended localhost:3333
|
||||
|
||||
set logging file benchmark.txt
|
||||
set logging enabled on
|
||||
|
||||
set $camtype = draw_mandelbrot()::cam
|
||||
set $views = {$camtype, $camtype, $camtype, $camtype, $camtype}
|
||||
|
||||
# default view; lots of black
|
||||
set $views[0].min_r = -1
|
||||
set $views[0].min_i = -.5
|
||||
set $views[0].max_r = 1
|
||||
set $views[0].max_i = .5
|
||||
|
||||
# noise and complex curves
|
||||
set $views[1].min_r = 3.1577176569116192
|
||||
set $views[1].min_i = 0.22066305108751161
|
||||
set $views[1].max_r = 3.1577882779434727
|
||||
set $views[1].max_i = 0.22069836160343248
|
||||
|
||||
#noise at high iter acount
|
||||
set $views[2].min_r = 3.1576023402469482
|
||||
set $views[2].min_i = 0.22069267606110915
|
||||
set $views[2].max_r = 3.1576029655564359
|
||||
set $views[2].max_i = 0.22069298871585336
|
||||
|
||||
# sub mandelbrot asscrack
|
||||
set $views[3].min_r = 1.5143340717923357
|
||||
set $views[3].min_i = -1.4054856689592869e-05
|
||||
set $views[3].max_r = 1.5143697529846534
|
||||
set $views[3].max_i = 3.7857394692316253e-06
|
||||
|
||||
#set gdb-workaround-stop-event 1
|
||||
|
||||
break main:BENCHMARK_INIT
|
||||
commands
|
||||
set $vi = 0
|
||||
while($vi < 4)
|
||||
print $views[$vi]
|
||||
set draw_mandelbrot()::cam = $views[$vi]
|
||||
set draw_mandelbrot()::view_mode = 0
|
||||
call draw_mandelbrot(0xff)
|
||||
print benchmark_stop()::time
|
||||
set $vi = $vi + 1
|
||||
end
|
||||
end
|
||||
|
||||
load
|
||||
continue
|
||||
|
||||
quit
|
531
program/stm32f1_buisnesscard_v1/benchmark.txt
Normal file
531
program/stm32f1_buisnesscard_v1/benchmark.txt
Normal file
@ -0,0 +1,531 @@
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$3 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$4 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [Remote target] will be detached.
|
||||
|
||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = 1.31749451
|
||||
$3 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$4 = 0.183570281
|
||||
$5 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$6 = 0.217522398
|
||||
$7 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
$8 = 0.761290252
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [Remote target] will be detached.
|
||||
|
||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = 1.31749451
|
||||
$3 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$4 = 0.183570281
|
||||
$5 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$6 = 0.217522398
|
||||
$7 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
$8 = 0.761290252
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [Remote target] will be detached.
|
||||
|
||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = 1.31749451
|
||||
$3 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$4 = 0.183570281
|
||||
$5 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$6 = 0.217522398
|
||||
$7 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
$8 = 0.761290252
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [Remote target] will be detached.
|
||||
|
||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = 1.31749451
|
||||
$3 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$4 = 0.183570281
|
||||
$5 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$6 = 0.217522398
|
||||
$7 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
$8 = 0.761290252
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [Remote target] will be detached.
|
||||
|
||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
benchmark.gdb:49: Error in sourced command file:
|
||||
Error erasing flash with vFlashErase packet
|
||||
------- tip of the day (disable with set show-tips off) -------
|
||||
The set show-flags on setting will display CPU flags register in the regs context panel
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
R0 0
|
||||
R1 0x42420000
|
||||
R2 0x12c0c0
|
||||
R3 0x4b03
|
||||
R4 0
|
||||
R5 0x40021000
|
||||
R6 0
|
||||
R7 0x80000000
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0xf8ff
|
||||
SP 0x20005000
|
||||
LR 0xffffffff
|
||||
PC 0x80038e4
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x80038e4 <Reset_Handler> movs r0, r0
|
||||
0x80038e6 <Reset_Handler+2> movs r0, r0
|
||||
0x80038e8 <Reset_Handler+4> movs r0, r0
|
||||
0x80038ea <Reset_Handler+6> movs r0, r0
|
||||
0x80038ec <Reset_Handler+8> movs r0, r0
|
||||
0x80038ee <Reset_Handler+10> movs r0, r0
|
||||
0x80038f0 <Reset_Handler+12> movs r0, r0
|
||||
0x80038f2 <Reset_Handler+14> movs r0, r0
|
||||
0x80038f4 <Reset_Handler+16> movs r0, r0
|
||||
0x80038f6 <Reset_Handler+18> movs r0, r0
|
||||
0x80038f8 <Reset_Handler+20> movs r0, r0
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/startup_stm32f103xb.s:64
|
||||
59 .weak Reset_Handler
|
||||
60 .type Reset_Handler, %function
|
||||
61 Reset_Handler:
|
||||
62
|
||||
63 /* Call the clock system initialization function.*/
|
||||
► 64 bl SystemInit
|
||||
65
|
||||
66 /* Copy the data segment initializers from flash to SRAM */
|
||||
67 ldr r0, =_sdata
|
||||
68 ldr r1, =_edata
|
||||
69 ldr r2, =_sidata
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20005000
|
||||
... ↓ 7 skipped
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x80038e4 Reset_Handler
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Continuing.
|
||||
target not halted
|
||||
target stm32f1x.cpu was not halted when resume was requested
|
||||
Halt timed out, wake up GDB.
|
||||
|
||||
Program received signal SIGINT, Interrupt.
|
||||
Reset_Handler () at startup_stm32f103xb.s:64
|
||||
64 bl SystemInit
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
R0 0
|
||||
R1 0x42420000
|
||||
R2 0x12c0c0
|
||||
R3 0x4b03
|
||||
R4 0
|
||||
R5 0x40021000
|
||||
R6 0
|
||||
R7 0x80000000
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0xf8ff
|
||||
SP 0x20005000
|
||||
LR 0xffffffff
|
||||
PC 0x80038e4
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x80038e4 <Reset_Handler> movs r0, r0
|
||||
0x80038e6 <Reset_Handler+2> movs r0, r0
|
||||
0x80038e8 <Reset_Handler+4> movs r0, r0
|
||||
0x80038ea <Reset_Handler+6> movs r0, r0
|
||||
0x80038ec <Reset_Handler+8> movs r0, r0
|
||||
0x80038ee <Reset_Handler+10> movs r0, r0
|
||||
0x80038f0 <Reset_Handler+12> movs r0, r0
|
||||
0x80038f2 <Reset_Handler+14> movs r0, r0
|
||||
0x80038f4 <Reset_Handler+16> movs r0, r0
|
||||
0x80038f6 <Reset_Handler+18> movs r0, r0
|
||||
0x80038f8 <Reset_Handler+20> movs r0, r0
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/startup_stm32f103xb.s:64
|
||||
59 .weak Reset_Handler
|
||||
60 .type Reset_Handler, %function
|
||||
61 Reset_Handler:
|
||||
62
|
||||
63 /* Call the clock system initialization function.*/
|
||||
► 64 bl SystemInit
|
||||
65
|
||||
66 /* Copy the data segment initializers from flash to SRAM */
|
||||
67 ldr r0, =_sdata
|
||||
68 ldr r1, =_edata
|
||||
69 ldr r2, =_sidata
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20005000
|
||||
... ↓ 7 skipped
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x80038e4 Reset_Handler
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Continuing.
|
||||
target not halted
|
||||
target stm32f1x.cpu was not halted when resume was requested
|
||||
The target is not running when halt was requested, stopping GDB.
|
||||
|
||||
Program received signal SIGINT, Interrupt.
|
||||
Reset_Handler () at startup_stm32f103xb.s:64
|
||||
64 bl SystemInit
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
R0 0
|
||||
R1 0x42420000
|
||||
R2 0x12c0c0
|
||||
R3 0x4b03
|
||||
R4 0
|
||||
R5 0x40021000
|
||||
R6 0
|
||||
R7 0x80000000
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0xf8ff
|
||||
SP 0x20005000
|
||||
LR 0xffffffff
|
||||
PC 0x80038e4
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x80038e4 <Reset_Handler> movs r0, r0
|
||||
0x80038e6 <Reset_Handler+2> movs r0, r0
|
||||
0x80038e8 <Reset_Handler+4> movs r0, r0
|
||||
0x80038ea <Reset_Handler+6> movs r0, r0
|
||||
0x80038ec <Reset_Handler+8> movs r0, r0
|
||||
0x80038ee <Reset_Handler+10> movs r0, r0
|
||||
0x80038f0 <Reset_Handler+12> movs r0, r0
|
||||
0x80038f2 <Reset_Handler+14> movs r0, r0
|
||||
0x80038f4 <Reset_Handler+16> movs r0, r0
|
||||
0x80038f6 <Reset_Handler+18> movs r0, r0
|
||||
0x80038f8 <Reset_Handler+20> movs r0, r0
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/startup_stm32f103xb.s:64
|
||||
59 .weak Reset_Handler
|
||||
60 .type Reset_Handler, %function
|
||||
61 Reset_Handler:
|
||||
62
|
||||
63 /* Call the clock system initialization function.*/
|
||||
► 64 bl SystemInit
|
||||
65
|
||||
66 /* Copy the data segment initializers from flash to SRAM */
|
||||
67 ldr r0, =_sdata
|
||||
68 ldr r1, =_edata
|
||||
69 ldr r2, =_sidata
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20005000
|
||||
... ↓ 7 skipped
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x80038e4 Reset_Handler
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Error erasing flash with vFlashErase packet
|
||||
Detaching from program: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/build/stm32f1_buisnesscard_v1.elf, Remote target
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
benchmark.gdb:49: Error in sourced command file:
|
||||
Error erasing flash with vFlashErase packet
|
||||
------- tip of the day (disable with set show-tips off) -------
|
||||
Use the pipe <cmd> | <prog> command to pass output of a GDB/Pwndbg command to a shell program, e.g. pipe elfsections | grep bss. This can also be shortened to: | <cmd> | <prog>
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
R0 0x40
|
||||
R1 0x80
|
||||
R2 1
|
||||
R3 0x20003548
|
||||
R4 0x97
|
||||
R5 6
|
||||
R6 0x8003a20
|
||||
R7 0
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0
|
||||
SP 0x20005000
|
||||
LR 0xffffffff
|
||||
PC 0x80038e4
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x80038e4 <Reset_Handler> bl #SystemInit <SystemInit>
|
||||
|
||||
0x80038e8 <Reset_Handler+4> ldr r0, [pc, #0x2c] R0, [LoopFillZerobss+14]
|
||||
0x80038ea <Reset_Handler+6> ldr r1, [pc, #0x30] R1, [LoopFillZerobss+18]
|
||||
0x80038ec <Reset_Handler+8> ldr r2, [pc, #0x30] R2, [LoopFillZerobss+22]
|
||||
0x80038ee <Reset_Handler+10> movs r3, #0 R3 => 0
|
||||
0x80038f0 <Reset_Handler+12> b #Reset_Handler+20 <Reset_Handler+20>
|
||||
↓
|
||||
0x80038f8 <Reset_Handler+20> adds r4, r0, r3
|
||||
0x80038fa <Reset_Handler+22> cmp r4, r1
|
||||
0x80038fc <Reset_Handler+24> blo #Reset_Handler+14 <Reset_Handler+14>
|
||||
|
||||
0x80038fe <Reset_Handler+26> ldr r2, [pc, #0x24] R2, [LoopFillZerobss+26]
|
||||
0x8003900 <Reset_Handler+28> ldr r4, [pc, #0x24] R4, [LoopFillZerobss+30]
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/startup_stm32f103xb.s:64
|
||||
59 .weak Reset_Handler
|
||||
60 .type Reset_Handler, %function
|
||||
61 Reset_Handler:
|
||||
62
|
||||
63 /* Call the clock system initialization function.*/
|
||||
► 64 bl SystemInit
|
||||
65
|
||||
66 /* Copy the data segment initializers from flash to SRAM */
|
||||
67 ldr r0, =_sdata
|
||||
68 ldr r1, =_edata
|
||||
69 ldr r2, =_sidata
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20005000
|
||||
... ↓ 7 skipped
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x80038e4 Reset_Handler
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Continuing.
|
||||
target not halted
|
||||
target stm32f1x.cpu was not halted when resume was requested
|
||||
|
||||
Program received signal SIGINT, Interrupt.
|
||||
0x08003428 in HAL_PWR_EnterSLEEPMode (Regulator=Regulator@entry=1, SLEEPEntry=SLEEPEntry@entry=1 '\001') at Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c:432
|
||||
432 __WFI();
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
*R0 1
|
||||
*R1 1
|
||||
*R2 0xe000ed00
|
||||
*R3 0
|
||||
*R4 0x2000009c
|
||||
*R5 1
|
||||
*R6 0
|
||||
*R7 0x2000004c
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0
|
||||
*SP 0x20004fc0
|
||||
LR 0x8000ea7
|
||||
*PC 0x8003428
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x8003428 <HAL_PWR_EnterSLEEPMode+24> bx lr <main+478>
|
||||
↓
|
||||
0x8000ea6 <main+478> ldr r5, [pc, #0x7c] R5, [main+604]
|
||||
0x8000ea8 <main+480> ldrb r3, [r5] R3, [button_event]
|
||||
0x8000eaa <main+482> ✔ cbz r3, #main+534 <main+534>
|
||||
↓
|
||||
0x8000ede <main+534> bl #HAL_SuspendTick <HAL_SuspendTick>
|
||||
|
||||
0x8000ee2 <main+538> movs r1, #1 R1 => 1
|
||||
0x8000ee4 <main+540> mov r0, r1
|
||||
0x8000ee6 <main+542> bl #HAL_PWR_EnterSTOPMode <HAL_PWR_EnterSTOPMode>
|
||||
|
||||
0x8000eea <main+546> bl #SystemClock_Config <SystemClock_Config>
|
||||
|
||||
0x8000eee <main+550> bl #HAL_ResumeTick <HAL_ResumeTick>
|
||||
|
||||
0x8000ef2 <main+554> bl #ST7735_wake <ST7735_wake>
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c:432
|
||||
427
|
||||
428 /* Select SLEEP mode entry -------------------------------------------------*/
|
||||
429 if(SLEEPEntry == PWR_SLEEPENTRY_WFI)
|
||||
430 {
|
||||
431 /* Request Wait For Interrupt */
|
||||
► 432 __WFI();
|
||||
433 }
|
||||
434 else
|
||||
435 {
|
||||
436 /* Request Wait For Event */
|
||||
437 __SEV();
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20004fc0
|
||||
01:0004│ 0x20004fc4
|
||||
02:0008│ 0x20004fc8
|
||||
... ↓ 3 skipped
|
||||
06:0018│ 0x20004fd8
|
||||
07:001c│ 0x20004fdc
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x8003428 HAL_PWR_EnterSLEEPMode+24
|
||||
1 0x8000ea6 main+478
|
||||
2 0x8003916 Reset_Handler+50
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Error erasing flash with vFlashErase packet
|
||||
Error erasing flash with vFlashErase packet
|
||||
Detaching from program: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/build/stm32f1_buisnesscard_v1.elf, Remote target
|
||||
[Inferior 1 (Remote target) detached]
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
benchmark.gdb:49: Error in sourced command file:
|
||||
Error erasing flash with vFlashErase packet
|
||||
------- tip of the day (disable with set show-tips off) -------
|
||||
Use contextprev and contextnext to display a previous context output again without scrolling
|
||||
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
|
||||
───────────────[ REGISTERS / show-flags off / show-compact-regs off ]───────────────
|
||||
R0 1
|
||||
R1 1
|
||||
R2 0x40007000
|
||||
R3 4
|
||||
R4 0xe000ed00
|
||||
R5 0x20000050
|
||||
R6 0
|
||||
R7 0x2000004c
|
||||
R8 0xffff
|
||||
R9 0x1000
|
||||
R10 0x20000054
|
||||
R11 0x77bdd31d
|
||||
R12 0
|
||||
SP 0x20005000
|
||||
LR 0xffffffff
|
||||
PC 0x80038e4
|
||||
──────────────────[ DISASM / armcm / thumb mode / set emulate on ]──────────────────
|
||||
► 0x80038e4 <Reset_Handler> movs r0, r0
|
||||
0x80038e6 <Reset_Handler+2> movs r0, r0
|
||||
0x80038e8 <Reset_Handler+4> movs r0, r0
|
||||
0x80038ea <Reset_Handler+6> movs r0, r0
|
||||
0x80038ec <Reset_Handler+8> movs r0, r0
|
||||
0x80038ee <Reset_Handler+10> movs r0, r0
|
||||
0x80038f0 <Reset_Handler+12> movs r0, r0
|
||||
0x80038f2 <Reset_Handler+14> movs r0, r0
|
||||
0x80038f4 <Reset_Handler+16> movs r0, r0
|
||||
0x80038f6 <Reset_Handler+18> movs r0, r0
|
||||
0x80038f8 <Reset_Handler+20> movs r0, r0
|
||||
─────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────
|
||||
In file: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/startup_stm32f103xb.s:64
|
||||
59 .weak Reset_Handler
|
||||
60 .type Reset_Handler, %function
|
||||
61 Reset_Handler:
|
||||
62
|
||||
63 /* Call the clock system initialization function.*/
|
||||
► 64 bl SystemInit
|
||||
65
|
||||
66 /* Copy the data segment initializers from flash to SRAM */
|
||||
67 ldr r0, =_sdata
|
||||
68 ldr r1, =_edata
|
||||
69 ldr r2, =_sidata
|
||||
─────────────────────────────────────[ STACK ]──────────────────────────────────────
|
||||
00:0000│ sp 0x20005000
|
||||
... ↓ 7 skipped
|
||||
───────────────────────────────────[ BACKTRACE ]────────────────────────────────────
|
||||
► 0 0x80038e4 Reset_Handler
|
||||
────────────────────────────────────────────────────────────────────────────────────
|
||||
Error erasing flash with vFlashErase packet
|
||||
Continuing.
|
||||
target not halted
|
||||
target stm32f1x.cpu was not halted when resume was requested
|
||||
shutdown command invoked
|
||||
Remote connection closed
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 14 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
Breakpoint 1 at 0x8000e9a: file Core/Src/main.c, line 129.
|
||||
Note: automatically using hardware breakpoints for read-only addresses.
|
||||
Loading section .isr_vector, size 0x10c lma 0x8000000
|
||||
Loading section .text, size 0x38c0 lma 0x8000110
|
||||
Loading section .rodata, size 0x9c lma 0x80039d0
|
||||
Loading section .init_array, size 0x4 lma 0x8003a6c
|
||||
Loading section .fini_array, size 0x4 lma 0x8003a70
|
||||
Loading section .data, size 0x30 lma 0x8003a74
|
||||
Start address 0x080038e4, load size 15008
|
||||
Transfer rate: 15 KB/sec, 2501 bytes/write.
|
||||
|
||||
Breakpoint 1, main () at Core/Src/main.c:130
|
||||
130 HAL_SuspendTick();
|
||||
$1 = {min_r = -1, min_i = -0.5, max_r = 1, max_i = 0.5}
|
||||
$2 = 1.31749451
|
||||
$3 = {min_r = 3.1577176569116192, min_i = 0.22066305108751161, max_r = 3.1577882779434727, max_i = 0.22069836160343248}
|
||||
$4 = 0.183570281
|
||||
$5 = {min_r = 3.1576023402469482, min_i = 0.22069267606110915, max_r = 3.1576029655564359, max_i = 0.22069298871585336}
|
||||
$6 = 0.217522398
|
||||
$7 = {min_r = 1.5143340717923357, min_i = -1.4054856689592869e-05, max_r = 1.5143697529846534, max_i = 3.7857394692316253e-06}
|
||||
$8 = 0.761290252
|
||||
Quit
|
||||
Detaching from program: /home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1/build/stm32f1_buisnesscard_v1.elf, Remote target
|
||||
Remote connection closed
|
@ -6,13 +6,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -37,13 +37,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -68,13 +68,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -99,13 +99,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -130,13 +130,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -161,13 +161,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -192,13 +192,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -223,13 +223,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -254,13 +254,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -285,13 +285,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -316,13 +316,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -347,13 +347,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -378,13 +378,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -409,13 +409,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -440,13 +440,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -471,13 +471,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -502,13 +502,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -533,13 +533,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -564,13 +564,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -595,13 +595,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -626,13 +626,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -657,13 +657,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -688,13 +688,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -721,13 +721,13 @@
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
@ -743,5 +743,36 @@
|
||||
"build/startup_stm32f103xb.o"
|
||||
],
|
||||
"file": "startup_stm32f103xb.s"
|
||||
},
|
||||
{
|
||||
"directory": "/home/indigo/projects/stm32_buisnesscard/program/stm32f1_buisnesscard_v1",
|
||||
"arguments": [
|
||||
"arm-none-eabi-gcc",
|
||||
"-c",
|
||||
"-mcpu=cortex-m3",
|
||||
"-mthumb",
|
||||
"-DSTM32F103xB",
|
||||
"-DUSE_HAL_DRIVER",
|
||||
"-ICore/Inc",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc",
|
||||
"-IDrivers/CMSIS/Device/ST/STM32F1xx/Include",
|
||||
"-IDrivers/CMSIS/Include",
|
||||
"-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy",
|
||||
"-Ofast",
|
||||
"-Wall",
|
||||
"-fdata-sections",
|
||||
"-ffunction-sections",
|
||||
"-ggdb",
|
||||
"-g3",
|
||||
"-MMD",
|
||||
"-MP",
|
||||
"-MFbuild/benchmark.d",
|
||||
"-Wall",
|
||||
"-Wa,-a,-ad,-alms=build/benchmark.lst",
|
||||
"Core/Src/benchmark.c",
|
||||
"-o",
|
||||
"build/benchmark.o"
|
||||
],
|
||||
"file": "Core/Src/benchmark.c"
|
||||
}
|
||||
]
|
||||
|
5
program/stm32f1_buisnesscard_v1/debug.gdb
Normal file
5
program/stm32f1_buisnesscard_v1/debug.gdb
Normal file
@ -0,0 +1,5 @@
|
||||
source /usr/share/pwndbg/gdbinit.py
|
||||
file build/stm32f1_buisnesscard_v1.elf
|
||||
target extended localhost:3333
|
||||
load
|
||||
|
4
program/stm32f1_buisnesscard_v1/optimizations
Normal file
4
program/stm32f1_buisnesscard_v1/optimizations
Normal file
@ -0,0 +1,4 @@
|
||||
border tracing - 255 iter only!
|
||||
frame shift
|
||||
change: side that has most iterations is the saved fb
|
||||
benchamrking: make shift benchmark
|
@ -56,7 +56,7 @@ ENTRY(Reset_Handler)
|
||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */
|
||||
/* Generate a link error if heap and stack don't fit into RAM */
|
||||
_Min_Heap_Size = 0x0; /* required amount of heap */
|
||||
_Min_Stack_Size = 0x4b16; /* required amount of stack */
|
||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
@ -102,7 +102,7 @@ SECTIONS
|
||||
. = ALIGN(4);
|
||||
} >FLASH
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM : {
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx*)
|
||||
@ -163,6 +163,7 @@ SECTIONS
|
||||
} >RAM
|
||||
|
||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||
/* just a check */
|
||||
._user_heap_stack :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
|
@ -125,7 +125,7 @@ ProjectManager.ProjectFileName=stm32f1_buisnesscard_v1.ioc
|
||||
ProjectManager.ProjectName=stm32f1_buisnesscard_v1
|
||||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=
|
||||
ProjectManager.StackSize=0x4b16
|
||||
ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=Makefile
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
|
239
program/stm32f1_buisnesscard_v1/thereisnogoodwaytodothis
Normal file
239
program/stm32f1_buisnesscard_v1/thereisnogoodwaytodothis
Normal file
@ -0,0 +1,239 @@
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include "mandelbrot.h"
|
||||
#include "st7735.h"
|
||||
#include "benchmark.h"
|
||||
#include "main.h"
|
||||
|
||||
#define RES_X 160
|
||||
#define RES_Y 80
|
||||
#define DEFAULT_CENTER_X 0
|
||||
#define DEFAULT_CENTER_Y 0
|
||||
#define STEP_SIZE .1
|
||||
#define ZOOM_SIZE .1
|
||||
|
||||
#define DECIMAL_LOC 28
|
||||
#define DOUBLE_SCALER (1 << DECIMAL_LOC)
|
||||
#define DOUBLE_TO_FIXED(val) (int32_t)((val) * DOUBLE_SCALER)
|
||||
#define FIXED_MULTIPLY(x,y) ((((uint64_t)(x))*(y)) >> DECIMAL_LOC)
|
||||
#define FIXED_TO_DOUBLE(val) ((val) / (double)DOUBLE_SCALER)
|
||||
|
||||
#define INFTY 2
|
||||
#define INFTY_SQR INFTY * INFTY
|
||||
#define ITERS 255
|
||||
#define INFTY_SQR_FIXED DOUBLE_TO_FIXED(INFTY_SQR)
|
||||
|
||||
//TODO move to some hardware.h or somethin
|
||||
//channel order: B, G, R
|
||||
#define R_BITS 5
|
||||
#define G_BITS 6
|
||||
#define B_BITS 5
|
||||
|
||||
//imaginary axis set automatically
|
||||
#define CAM_DEF_MIN_R -1
|
||||
#define CAM_DEF_MAX_R 1
|
||||
|
||||
//set controls
|
||||
#define CAM_MOVE_UP BUTTON_UP
|
||||
#define CAM_MOVE_RIGHT BUTTON_RIGHT
|
||||
#define CAM_MOVE_DOWN BUTTON_DOWN
|
||||
#define CAM_MOVE_LEFT BUTTON_LEFT
|
||||
#define CAM_ZOOM_IN BUTTON_A
|
||||
#define CAM_ZOOM_OUT BUTTON_B
|
||||
|
||||
struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
|
||||
enum VIEW_MODES { VIEW_UNINIT, VIEW_MANDREL, VIEW_SHIP };
|
||||
|
||||
void init_colorscheme_mandrel(uint16_t *scheme) {
|
||||
uint16_t *tc = scheme;
|
||||
for(unsigned int i = 0; i < ITERS; i++) {
|
||||
if((i == 0) || (i == ITERS)) *tc = 0;
|
||||
else if(i < 128) *tc = (((((i - 64) << 2)+0x1f) & 0x1f) | (((((i - 128) << 1)+0x1f) & 0x1f) << (5+6)));
|
||||
else *tc = (-2*(i - 128)+0x1f) & 0xff;
|
||||
*tc = (*tc << 8) | (*tc >> 8); //convert to little endian
|
||||
tc++;
|
||||
}
|
||||
}
|
||||
|
||||
void init_colorscheme_ship(uint16_t *scheme) {
|
||||
uint16_t *tc = scheme;
|
||||
for(unsigned int i = 0; i < ITERS; i++) {
|
||||
if((i == 0) || (i == ITERS)) *tc = 0;
|
||||
else *tc = (((i - (128)) << 1)+0x1f) << (5+6);
|
||||
tc++;
|
||||
}
|
||||
}
|
||||
|
||||
void cam_shift(struct camera *cam, double step_r, double step_i) {
|
||||
double i_offset = (cam->max_i - cam->min_i) * step_i;
|
||||
double r_offset = (cam->max_r - cam->min_r) * step_r;
|
||||
cam->min_i += i_offset;
|
||||
cam->max_i += i_offset;
|
||||
cam->min_r += r_offset;
|
||||
cam->max_r += r_offset;
|
||||
}
|
||||
|
||||
void cam_zoom(struct camera *cam, double zoom) {
|
||||
double i_scale = (cam->max_i - cam->min_i) * zoom;
|
||||
double r_scale = (cam->max_r - cam->min_r) * zoom;
|
||||
cam->min_i += i_scale;
|
||||
cam->max_i -= i_scale;
|
||||
cam->min_r += r_scale;
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
|
||||
//TODO look into border tracing; this is too slow. Change name
|
||||
//
|
||||
void render_mandelbrot(uint16_t *framebuffer, uint16_t *colorscheme, struct camera cam, int x0, int y0, int w, int h) {
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED((((cam.max_i - cam.min_i) * (RES_Y - y0)) / RES_Y) + cam.min_i);
|
||||
int32_t c_r0 = DOUBLE_TO_FIXED((((cam.max_r - cam.min_r) * x0) / RES_X) + cam.min_r);
|
||||
int32_t c_r, z_i, z_r, zn_r, z_r_2, z_i_2;
|
||||
size_t fb_index = 0;
|
||||
int i;
|
||||
|
||||
//for(;;);
|
||||
|
||||
for(int y = y0; y < y0 + h; y++) {
|
||||
c_r = c_r0;
|
||||
for(int x = x0; x < x0 + w; x++) {
|
||||
z_i = 0;
|
||||
z_r = 0;
|
||||
for(i = 0; i < ITERS; i++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + c_r;
|
||||
|
||||
//z_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + c_i;
|
||||
z_i = (FIXED_MULTIPLY(z_r, z_i) << 1) + c_i;
|
||||
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) break;
|
||||
}
|
||||
framebuffer[fb_index++] = colorscheme[i];
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define FB_SIZE_X RES_X
|
||||
#define FB_SIZE_Y RES_Y/2
|
||||
|
||||
//TODO rename
|
||||
void draw_mandelbrot(int key_pressed) {
|
||||
static uint16_t framebuffer[FB_SIZE_X * FB_SIZE_Y];
|
||||
uint16_t columnbuffer[8*RES_Y];
|
||||
static bool bottom_buffered = true;
|
||||
//program flow is awful atm becuase I was planning something different; will be improved soon.
|
||||
static struct camera cam = {
|
||||
.min_r = CAM_DEF_MIN_R,
|
||||
.max_r = CAM_DEF_MAX_R,
|
||||
.min_i = ((double)RES_Y / RES_X) * CAM_DEF_MIN_R,
|
||||
.max_i = ((double)RES_Y / RES_X) * CAM_DEF_MAX_R,
|
||||
|
||||
};
|
||||
static int view_mode = VIEW_UNINIT;
|
||||
static uint16_t colorscheme[ITERS];
|
||||
|
||||
|
||||
|
||||
//we could get rid of this and do some awful bitbashing lol
|
||||
//but for readability, we shant
|
||||
//TODO camera moves l/r more then u/d for some reason
|
||||
/**
|
||||
if(key_pressed & CAM_MOVE_UP) cam_shift(&cam, 0, STEP_SIZE);
|
||||
if(key_pressed & CAM_MOVE_DOWN) cam_shift(&cam, 0, -STEP_SIZE);
|
||||
if(key_pressed & CAM_MOVE_RIGHT) cam_shift(&cam, -STEP_SIZE, 0);
|
||||
if(key_pressed & CAM_MOVE_LEFT) cam_shift(&cam, STEP_SIZE, 0);
|
||||
if(key_pressed & CAM_ZOOM_IN) cam_zoom(&cam, ZOOM_SIZE);
|
||||
if(key_pressed & CAM_ZOOM_OUT) cam_zoom(&cam, -ZOOM_SIZE);
|
||||
**/
|
||||
|
||||
//yes, I know the following is disgusting. Before I clean it, I just wanna get the general idea out,
|
||||
//it's more efficient in that order
|
||||
//TODO once you get your idea ironed out, clean the code and improve the flow
|
||||
benchmark_start();
|
||||
if(view_mode == VIEW_UNINIT) {
|
||||
view_mode = VIEW_MANDREL;
|
||||
init_colorscheme_mandrel(colorscheme);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, 0, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, 0, RES_X, (RES_Y / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, RES_Y/2, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, (RES_Y / 2), RES_X, (RES_Y / 2), framebuffer);
|
||||
bottom_buffered = true;
|
||||
}
|
||||
else {
|
||||
uint16_t top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
switch(key_pressed) {
|
||||
const int y_offset = STEP_SIZE * RES_Y;
|
||||
const int x_offset = STEP_SIZE * RES_X;
|
||||
const size_t lines_rendered = (RES_Y/2) - y_offset;
|
||||
const size_t rendered_area_y = RES_X * lines_rendered * sizeof(uint16_t);
|
||||
const uint16_t framebuffer_offset_y = framebuffer + (RES_X * y_offset);
|
||||
const uint16_t columns_rendered = RES_X - x_offset;
|
||||
const uint16_t
|
||||
case BUTTON_UP:
|
||||
cam_shift(&cam, 0, STEP_SIZE);
|
||||
memmove(framebuffer_offset, framebuffer, rendered_area_y);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_DOWN:
|
||||
cam_shift(&cam, 0, -STEP_SIZE);
|
||||
memmove(framebuffer, framebuffer_offset_y, rendered_area_y);
|
||||
render_mandelbrot(framebuffer+(RES_X*lines_rendered), colorscheme, cam, 0, bottom_buffered ? RES_Y : lines_rendered, RES_X, y_offset);
|
||||
break;
|
||||
case BUTTON_RIGHT:
|
||||
cam_shift(&cam, STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, RES_X - x_offset, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y), framebuffer + (RES_X * y) + x_offset, (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y) + (RES_X - x_offset), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_LEFT:
|
||||
cam_shift(&cam, -STEP_SIZE, 0);
|
||||
render_mandelbrot(columnbuffer, colorscheme, cam, 0, top_line, x_offset, RES_Y/2);
|
||||
for(uint16_t y = 0; y < RES_Y/2; y++) {
|
||||
memmove(framebuffer + (RES_X * y) + x_offset, framebuffer + (RES_X * y), (RES_X - x_offset) * sizeof(*framebuffer));
|
||||
memmove(framebuffer + (RES_X * y), columnbuffer + (x_offset * y), x_offset * sizeof(*framebuffer));
|
||||
}
|
||||
break;
|
||||
case BUTTON_A:
|
||||
cam_zoom(&cam, ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
case BUTTON_B:
|
||||
cam_zoom(&cam, -ZOOM_SIZE);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
break;
|
||||
default:
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
}
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
|
||||
bottom_buffered = !bottom_buffered;
|
||||
top_line = bottom_buffered ? (RES_Y/2) : 0;
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, 0, top_line, RES_X, RES_Y/2);
|
||||
ST7735_DrawImage(0, top_line, RES_X, (RES_Y/2), framebuffer);
|
||||
}
|
||||
benchmark_stop();
|
||||
|
||||
|
||||
/**
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, false, key_pressed);
|
||||
ST7735_DrawImage(0, 0, ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
render_mandelbrot(framebuffer, colorscheme, cam, true, key_pressed);
|
||||
ST7735_DrawImage(0, (ST7735_HEIGHT / 2), ST7735_WIDTH, (ST7735_HEIGHT / 2), framebuffer);
|
||||
**/
|
||||
// ST7735_DrawImage(0, 0, ST7735_WIDTH - 1, ST7735_HEIGHT - 1, (uint16_t *)0x80000000);
|
||||
}
|
28
recon/mandelbrot_tests/c/.gdb_history
Normal file
28
recon/mandelbrot_tests/c/.gdb_history
Normal file
@ -0,0 +1,28 @@
|
||||
start_pwndbg
|
||||
break test
|
||||
c
|
||||
start
|
||||
print bitarray
|
||||
context
|
||||
next
|
||||
nexti
|
||||
print bitarray
|
||||
quit
|
||||
start_pwndbg
|
||||
break test
|
||||
c
|
||||
r
|
||||
next
|
||||
print bitarray
|
||||
next
|
||||
print bitarray
|
||||
quit
|
||||
start_pwndbg
|
||||
start
|
||||
break test
|
||||
c
|
||||
next
|
||||
print bitarray
|
||||
next
|
||||
print bitarray
|
||||
exit
|
210
recon/mandelbrot_tests/c/backup
Normal file
210
recon/mandelbrot_tests/c/backup
Normal file
@ -0,0 +1,210 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <raylib.h>
|
||||
#include <raymath.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define WINDOW_SIZE_X 1600
|
||||
#define WINDOW_SIZE_Y 800
|
||||
#define RES_X 1600
|
||||
#define RES_Y 800
|
||||
#define DEFAULT_CENTER_X 0
|
||||
#define DEFAULT_CENTER_Y 0
|
||||
#define MOUSE_BUTTON 0
|
||||
#define STEP_SIZE .1
|
||||
#define ZOOM_SIZE .1
|
||||
|
||||
|
||||
#define DECIMAL_LOC 28
|
||||
#define DOUBLE_SCALER (1 << DECIMAL_LOC)
|
||||
#define DOUBLE_TO_FIXED(val) (int32_t)((val) * DOUBLE_SCALER)
|
||||
#define FIXED_MULTIPLY(x,y) ((((uint64_t)(x))*(y)) >> DECIMAL_LOC)
|
||||
#define FIXED_TO_DOUBLE(val) ((val) / (double)DOUBLE_SCALER)
|
||||
|
||||
#define INFTY 2
|
||||
#define INFTY_SQR INFTY * INFTY
|
||||
#define ITERS 255
|
||||
#define INFTY_SQR_FIXED DOUBLE_TO_FIXED(INFTY_SQR)
|
||||
|
||||
//#define SHIP
|
||||
#undef SHIP
|
||||
|
||||
#ifdef SHIP
|
||||
Color get_color(int i) {
|
||||
if(i == ITERS) return (Color){0, 0, 0, 255};
|
||||
if(i == 0) return (Color){0, 0, 0, 255};
|
||||
return (Color) {
|
||||
2*(i - 128)+255,
|
||||
0,
|
||||
0,
|
||||
255
|
||||
};
|
||||
}
|
||||
#else
|
||||
Color get_color(int i) {
|
||||
if((i == ITERS) || (i == 0)) return (Color){0, 0, 0, 255};
|
||||
if(i < 128) {
|
||||
return (Color) {
|
||||
(8*(i - 128)+255) & 0xff,
|
||||
0,
|
||||
(16*(i - 64)+255) & 0xff,
|
||||
255
|
||||
};
|
||||
}
|
||||
return (Color) {
|
||||
0,
|
||||
0,
|
||||
((unsigned int)-2*(i - 128)+255) & 0xff,
|
||||
255
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
|
||||
struct vec2_double {
|
||||
double x, y;
|
||||
};
|
||||
|
||||
struct vec2_float {
|
||||
int32_t x, y;
|
||||
};
|
||||
|
||||
static inline int iterate(int32_t r, int32_t i) {
|
||||
int32_t z_i = 0;
|
||||
int32_t z_r = 0;
|
||||
int32_t z_r_2, z_i_2, zn_r, zn_i;
|
||||
for(int it = 0; it < ITERS; it++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + r;
|
||||
|
||||
#ifdef SHIP
|
||||
zn_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#else
|
||||
zn_i = (FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#endif
|
||||
|
||||
z_i = zn_i;
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) return it;
|
||||
}
|
||||
return ITERS;
|
||||
}
|
||||
|
||||
//blllluuuuurg, matracies and vectors in raylib are floats and we need doubles
|
||||
void shift_cam(struct camera *cam, double step_r, double step_i) {
|
||||
double i_offset = (cam->max_i - cam->min_i) * step_i;
|
||||
double r_offset = (cam->max_r - cam->min_r) * step_r;
|
||||
cam->min_i += i_offset;
|
||||
cam->max_i += i_offset;
|
||||
cam->min_r += r_offset;
|
||||
cam->max_r += r_offset;
|
||||
}
|
||||
|
||||
void zoom_cam(struct camera *cam, double zoom) {
|
||||
double i_scale = (cam->max_i - cam->min_i) * zoom;
|
||||
double r_scale = (cam->max_r - cam->min_r) * zoom;
|
||||
cam->min_i += i_scale;
|
||||
cam->max_i -= i_scale;
|
||||
cam->min_r += r_scale;
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
enum DIRECTIONS {
|
||||
N, NE, E, SE, S, SW, W, NW
|
||||
};
|
||||
|
||||
int main() {
|
||||
Color *pixels = malloc(RES_X * RES_Y * sizeof(Color));
|
||||
struct camera cam = {
|
||||
.min_r = -1,
|
||||
.max_r = 1,
|
||||
// .min_i = -1,
|
||||
// .max_i = 1
|
||||
};
|
||||
cam.min_i = ((double)RES_Y / RES_X) * cam.min_r;
|
||||
cam.max_i = ((double)RES_Y / RES_X) * cam.max_r;
|
||||
InitWindow(WINDOW_SIZE_X, WINDOW_SIZE_Y, "mandelbrot fixed point test");
|
||||
|
||||
Image img = GenImageColor(RES_X, RES_Y, BLUE);
|
||||
Texture tex = LoadTextureFromImage(img);
|
||||
UnloadImage(img);
|
||||
|
||||
SetTargetFPS(10);
|
||||
|
||||
|
||||
while(!WindowShouldClose()) {
|
||||
switch(GetKeyPressed()) {
|
||||
case KEY_UP:
|
||||
shift_cam(&cam, 0, STEP_SIZE);
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
shift_cam(&cam, 0, -STEP_SIZE);
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
shift_cam(&cam, STEP_SIZE, 0);
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
shift_cam(&cam, -STEP_SIZE, 0);
|
||||
break;
|
||||
case KEY_W:
|
||||
zoom_cam(&cam, ZOOM_SIZE);
|
||||
break;
|
||||
case KEY_S:
|
||||
zoom_cam(&cam, -ZOOM_SIZE);
|
||||
break;
|
||||
default:
|
||||
BeginDrawing();
|
||||
EndDrawing();
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
printf("(%.6f, %.6f) - (%.6f, %.6f)\n", cam.min_r, cam.min_i, cam.max_r, cam.max_i);
|
||||
struct coords {
|
||||
int x, y
|
||||
};
|
||||
{
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(cam.max_i);
|
||||
int32_t c_r;
|
||||
uint8_t rendered[(RES_X * RES_Y) / 8] = {0};
|
||||
uint8_t edges[(RES_X * RES_Y) / 8] = {0};
|
||||
int32_t directions_r[8] = {0, scale_r, scale_r, scale_r, 0, -scale_r, -scale_r, -scale_r};
|
||||
int32_t directions_i[8] = {scale_i, scale_i, 0, -scale_i, -scale_i, -scale_i, 0, scale_i};
|
||||
int i;
|
||||
for(int y = 0; y < RES_Y; y++) {
|
||||
c_r = DOUBLE_TO_FIXED(cam.min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
int i = iterate(c_r, c_i);
|
||||
if(i >= ITERS) {
|
||||
int start_x = x;
|
||||
int start_y = y;
|
||||
do {
|
||||
for(int canidate_d = 0; canidate_d < NW; canidate_d++) {
|
||||
|
||||
}
|
||||
} while((x != start_x) && (y != start_y));
|
||||
}
|
||||
pixels[((y * RES_X) + x)] = get_color(iterate(c_r, c_i));
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
}
|
||||
}
|
||||
|
||||
BeginDrawing();
|
||||
UpdateTexture(tex, pixels);
|
||||
DrawTextureEx(tex, (Vector2){0,0}, 0, (float)GetRenderWidth()/RES_X, WHITE);
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,26 +1,105 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include <raylib.h>
|
||||
#include <raymath.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define RES_X 160
|
||||
#define RES_Y 80
|
||||
#define DEFAULT_CENTER_X 0
|
||||
#define DEFAULT_CENTER_Y 0
|
||||
#define MOUSE_BUTTON 0
|
||||
#define STEP_SIZE .25
|
||||
#define ZOOM_SIZE .25
|
||||
#define WINDOW_SIZE_X 1600
|
||||
#define WINDOW_SIZE_Y 800
|
||||
#define RES_X 160
|
||||
#define RES_Y 80
|
||||
#define DEFAULT_CENTER_X 0
|
||||
#define DEFAULT_CENTER_Y 0
|
||||
#define MOUSE_BUTTON 0
|
||||
#define STEP_SIZE .1
|
||||
#define ZOOM_SIZE .1
|
||||
|
||||
#define INFTY 2
|
||||
|
||||
#define DECIMAL_LOC 28
|
||||
#define DOUBLE_SCALER (1 << DECIMAL_LOC)
|
||||
#define DOUBLE_TO_FIXED(val) (int32_t)((val) * DOUBLE_SCALER)
|
||||
#define FIXED_MULTIPLY(x,y) ((((uint64_t)(x))*(y)) >> DECIMAL_LOC)
|
||||
#define FIXED_TO_DOUBLE(val) ((val) / (double)DOUBLE_SCALER)
|
||||
|
||||
#define INFTY 2
|
||||
#define INFTY_SQR INFTY * INFTY
|
||||
#define ITERS 255
|
||||
#define ITERS 255
|
||||
#define INFTY_SQR_FIXED DOUBLE_TO_FIXED(INFTY_SQR)
|
||||
|
||||
//#define SHIP
|
||||
#undef SHIP
|
||||
|
||||
#ifdef SHIP
|
||||
Color get_color(int i) {
|
||||
if(i == ITERS) return (Color){0, 0, 0, 255};
|
||||
if(i == 0) return (Color){0, 0, 0, 255};
|
||||
return (Color) {
|
||||
2*(i - 128)+255,
|
||||
0,
|
||||
0,
|
||||
255
|
||||
};
|
||||
}
|
||||
#else
|
||||
Color get_color(int i) {
|
||||
// if((i == ITERS) || (i == 0)) return (Color){0, 0, 0, 255};
|
||||
if(i == ITERS) return (Color){0,255,0,255};
|
||||
if(i == 0) return (Color){0, 0, 0, 255};
|
||||
if(i < 128) {
|
||||
return (Color) {
|
||||
(8*(i - 128)+255) & 0xff,
|
||||
0,
|
||||
(16*(i - 64)+255) & 0xff,
|
||||
255
|
||||
};
|
||||
}
|
||||
return (Color) {
|
||||
0,
|
||||
0,
|
||||
((unsigned int)-2*(i - 128)+255) & 0xff,
|
||||
255
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
|
||||
struct vec2_double {
|
||||
double x, y;
|
||||
};
|
||||
|
||||
struct vec2_float {
|
||||
int32_t x, y;
|
||||
};
|
||||
|
||||
static inline int iterate(int32_t r, int32_t i) {
|
||||
int32_t z_i = 0;
|
||||
int32_t z_r = 0;
|
||||
int32_t z_r_2, z_i_2, zn_r, zn_i;
|
||||
for(int it = 0; it < ITERS; it++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + r;
|
||||
|
||||
#ifdef SHIP
|
||||
zn_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#else
|
||||
zn_i = (FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#endif
|
||||
|
||||
z_i = zn_i;
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) return it;
|
||||
}
|
||||
return ITERS;
|
||||
}
|
||||
|
||||
//blllluuuuurg, matracies and vectors in raylib are floats and we need doubles
|
||||
void shift_cam(struct camera *cam, double step_r, double step_i) {
|
||||
double i_offset = (cam->max_i - cam->min_i) * step_i;
|
||||
@ -40,23 +119,29 @@ void zoom_cam(struct camera *cam, double zoom) {
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
enum DIRECTIONS {
|
||||
N, NE, E, SE, S, SW, W, NW
|
||||
};
|
||||
|
||||
int main() {
|
||||
int key_pressed;
|
||||
Color *pixels = malloc(RES_X * RES_Y * sizeof(Color));
|
||||
struct camera cam = {
|
||||
.min_r = -1,
|
||||
.max_r = 1,
|
||||
|
||||
yru += di*(targety - yru)/10.;
|
||||
} .min_i = -1,
|
||||
.max_i = 1
|
||||
// .min_i = -1,
|
||||
// .max_i = 1
|
||||
};
|
||||
InitWindow(RES_X, RES_Y, "mandelbrot fixed point test");
|
||||
cam.min_i = ((double)RES_Y / RES_X) * cam.min_r;
|
||||
cam.max_i = ((double)RES_Y / RES_X) * cam.max_r;
|
||||
InitWindow(WINDOW_SIZE_X, WINDOW_SIZE_Y, "mandelbrot fixed point test");
|
||||
|
||||
Image img = GenImageColor(RES_X, RES_Y, BLUE);
|
||||
Texture tex = LoadTextureFromImage(img);
|
||||
UnloadImage(img);
|
||||
|
||||
SetTargetFPS(10);
|
||||
|
||||
|
||||
while(!WindowShouldClose()) {
|
||||
switch(GetKeyPressed()) {
|
||||
case KEY_UP:
|
||||
@ -72,7 +157,6 @@ int main() {
|
||||
shift_cam(&cam, -STEP_SIZE, 0);
|
||||
break;
|
||||
case KEY_W:
|
||||
printf("a\n");
|
||||
zoom_cam(&cam, ZOOM_SIZE);
|
||||
break;
|
||||
case KEY_S:
|
||||
@ -84,35 +168,26 @@ int main() {
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
printf("(%f, %f) - (%f, %f)\n", cam.min_r, cam.min_i, cam.max_r, cam.max_i);
|
||||
printf("(%.21f, %.21f) - (%.21f, %.21f)\n", cam.min_r, cam.min_i, cam.max_r, cam.max_i);
|
||||
{
|
||||
//double scale_i = (cam.max_i - cam.min_i) / (double)GetRenderHeight();
|
||||
//double scale_r = (cam.max_r - cam.min_r) / (double)GetRenderWidth();
|
||||
double scale_i = (cam.max_i - cam.min_i) / (double)RES_Y;
|
||||
double scale_r = (cam.max_r - cam.min_r) / (double)RES_X;
|
||||
double c_i = cam.max_i;
|
||||
double c_r;
|
||||
double z_i;
|
||||
double z_r;
|
||||
double zn_r, zn_i;
|
||||
int i;
|
||||
uint8_t color;
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(cam.max_i);
|
||||
int32_t c_r;
|
||||
for(int y = 0; y < RES_Y; y++) {
|
||||
c_r = cam.min_r;
|
||||
c_r = DOUBLE_TO_FIXED(cam.min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
z_i = 0;
|
||||
z_r = 0;
|
||||
for(i = 0; i < ITERS; i++) {
|
||||
zn_r = pow(z_r, 2.0) - pow(z_i, 2.0) + c_r;
|
||||
zn_i = (2.0 * z_r * z_i) + c_i;
|
||||
z_i = zn_i;
|
||||
z_r = zn_r;
|
||||
if((pow(z_i, 2.0) + pow(z_r, 2.0)) > INFTY_SQR) {
|
||||
break;
|
||||
}
|
||||
int i = iterate(c_r, c_i);
|
||||
if(i >= ITERS) {
|
||||
int start_x = x;
|
||||
int start_y = y;
|
||||
do {
|
||||
for(int canidate_d = 0; canidate_d < NW; canidate_d++) {
|
||||
|
||||
}
|
||||
} while((x != start_x) && (y != start_y));
|
||||
}
|
||||
color = ((float)i / ITERS) * UINT8_MAX;
|
||||
pixels[((y * RES_X) + x)] = (Color){color, color, color, 255};
|
||||
pixels[((y * RES_X) + x)] = get_color(iterate(c_r, c_i));
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
@ -121,7 +196,7 @@ int main() {
|
||||
|
||||
BeginDrawing();
|
||||
UpdateTexture(tex, pixels);
|
||||
DrawTexture(tex, 0, 0, WHITE);
|
||||
DrawTextureEx(tex, (Vector2){0,0}, 0, (float)GetRenderWidth()/RES_X, WHITE);
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <raylib.h>
|
||||
#include <raymath.h>
|
||||
#include <limits.h>
|
||||
#include <complex.h>
|
||||
|
||||
#define WINDOW_SIZE_X 1600
|
||||
#define WINDOW_SIZE_Y 800
|
||||
@ -28,6 +29,7 @@
|
||||
#define INFTY_SQR_FIXED DOUBLE_TO_FIXED(INFTY_SQR)
|
||||
|
||||
#define SHIP
|
||||
//#undef SHIP
|
||||
|
||||
#ifdef SHIP
|
||||
Color get_color(int i) {
|
||||
@ -42,7 +44,9 @@ Color get_color(int i) {
|
||||
}
|
||||
#else
|
||||
Color get_color(int i) {
|
||||
if((i == ITERS) || (i == 0)) return (Color){0, 0, 0, 255};
|
||||
// if((i == ITERS) || (i == 0)) return (Color){0, 0, 0, 255};
|
||||
if(i == ITERS) return (Color){0,255,0,255};
|
||||
if(i == 0) return (Color){0, 0, 0, 255};
|
||||
if(i < 128) {
|
||||
return (Color) {
|
||||
(8*(i - 128)+255) & 0xff,
|
||||
@ -65,6 +69,38 @@ struct camera {
|
||||
double min_r, min_i, max_r, max_i;
|
||||
};
|
||||
|
||||
struct vec2_double {
|
||||
double x, y;
|
||||
};
|
||||
|
||||
struct vec2_float {
|
||||
int32_t x, y;
|
||||
};
|
||||
|
||||
static inline int iterate(int32_t r, int32_t i) {
|
||||
int32_t z_i = 0;
|
||||
int32_t z_r = 0;
|
||||
int32_t z_r_2, z_i_2, zn_r, zn_i;
|
||||
for(int it = 0; it < ITERS; it++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + r;
|
||||
|
||||
#ifdef SHIP
|
||||
zn_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#else
|
||||
zn_i = (FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + i;
|
||||
#endif
|
||||
|
||||
z_i = zn_i;
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) return it;
|
||||
}
|
||||
return ITERS;
|
||||
}
|
||||
|
||||
//blllluuuuurg, matracies and vectors in raylib are floats and we need doubles
|
||||
void shift_cam(struct camera *cam, double step_r, double step_i) {
|
||||
double i_offset = (cam->max_i - cam->min_i) * step_i;
|
||||
@ -84,7 +120,132 @@ void zoom_cam(struct camera *cam, double zoom) {
|
||||
cam->max_r -= r_scale;
|
||||
}
|
||||
|
||||
enum DIRECTIONS {
|
||||
N, NE, E, SE, S, SW, W, NW
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
double x; double y;
|
||||
} coordinate;
|
||||
|
||||
//we can inline these if needed
|
||||
|
||||
inline bool bitarray_check(uint8_t *array, size_t i) {
|
||||
return array[i/8] & (1 << (i%8));
|
||||
}
|
||||
|
||||
inline void bitarray_set(uint8_t *array, size_t i) {
|
||||
array[i/8] |= (1 << (i%8));
|
||||
}
|
||||
|
||||
/**
|
||||
inline coordinate get_neighbor_coord(coordinate from_coord, int direction, coordinate step) {
|
||||
if((direction == NW) && (direction < E)) from_coord.x += ;
|
||||
if((direction > N) && (direction < S)) from_coord += 1;
|
||||
if((direction > E) && (direction < W)) from_coord += RES_X;
|
||||
if(direction > S) from_coord -= 1;
|
||||
return from_coord;
|
||||
}
|
||||
**/
|
||||
|
||||
|
||||
size_t get_neighbor_index(size_t from_pixel, int direction) {
|
||||
//canidate for optimization; lots of branches. maybe inline
|
||||
if((direction == NW) && (direction < E)) from_pixel -= RES_X;
|
||||
if((direction > N) && (direction < S)) from_pixel += 1;
|
||||
if((direction > E) && (direction < W)) from_pixel += RES_X;
|
||||
if(direction > S) from_pixel -= 1;
|
||||
return from_pixel;
|
||||
}
|
||||
|
||||
|
||||
bool bitarray_check(uint8_t *array, size_t i);
|
||||
void bitarray_set(uint8_t *array, size_t i);
|
||||
#define BITARRAY_SET(array, i) ((array)[(i)/8] |= (1 << ((i) % 8)))
|
||||
#define BITARRAY_CHECK(array, i) ((array)[(i)/8] & (1 << ((i) % 8)))
|
||||
|
||||
/**
|
||||
enum CANIDATE_STATUS {
|
||||
UNSOLVED = 0,
|
||||
CANIDATE,
|
||||
NONCANIDATE
|
||||
};
|
||||
**/
|
||||
|
||||
unsigned int mandelbrot_bordertrace(struct camera *cam, Color *pixels) {
|
||||
//these lookup tables r cheap cuz on the stm32f1, 1 memory read is 1 instruction
|
||||
const size_t neighbor_index_accl[8] = {-RES_X, -RES_X + 1, 1, RES_X + 1, RES_X, RES_X - 1, -1, -RES_X - 1};
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam->max_i - cam->min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam->max_r - cam->min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(cam->max_i);
|
||||
int32_t c_r;
|
||||
unsigned int total_iters = 0;
|
||||
size_t on_pixel = 0;
|
||||
uint8_t border[(160*80)/8] = {0};
|
||||
//for keeping track of border only. will organize later
|
||||
uint8_t set[(160*80)/8] = {0};
|
||||
uint8_t unset[(160*80)/8] = {0};
|
||||
for(int y = 0; y < RES_Y; y++) {
|
||||
c_r = DOUBLE_TO_FIXED(cam->min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
int i = iterate(c_r, c_i);
|
||||
total_iters += i;
|
||||
pixels[((y * RES_X) + x)] = get_color(i);
|
||||
|
||||
//this is where it all begins
|
||||
if(i == ITERS) {
|
||||
int current_border_pixel = on_pixel;
|
||||
uint8_t visited_border[(160*80)/8] = {0};
|
||||
int filled_neighbors = 0;
|
||||
//unroll and manually get_neighbor if this is too slow
|
||||
for(int nei_dir = 0; nei_dir < 8; nei_dir++) {
|
||||
size_t nei_i = current_border_pixel + neighbor_index_accl[nei_dir];
|
||||
if(bitarray_check(set, nei_i)) {
|
||||
filled_neighbors++;
|
||||
continue;
|
||||
}
|
||||
if(bitarray_check(unset, nei_i)) continue;
|
||||
|
||||
}
|
||||
//if c_d == 7 go back
|
||||
}
|
||||
c_r += scale_r;
|
||||
}
|
||||
on_pixel++;
|
||||
c_i -= scale_i;
|
||||
}
|
||||
return total_iters;
|
||||
}
|
||||
|
||||
unsigned int mandelbrot_unoptimized(struct camera *cam, Color *pixels) {
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam->max_i - cam->min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam->max_r - cam->min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(cam->max_i);
|
||||
int32_t c_r;
|
||||
unsigned int total_iters = 0;
|
||||
for(int y = 0; y < RES_Y; y++) {
|
||||
c_r = DOUBLE_TO_FIXED(cam->min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
int i = iterate(c_r, c_i);
|
||||
total_iters += i;
|
||||
pixels[((y * RES_X) + x)] = get_color(i);
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
}
|
||||
return total_iters;
|
||||
}
|
||||
|
||||
void test() {
|
||||
uint8_t bitarray[(160*80)/8] = {0};
|
||||
int test_i = 9;
|
||||
BITARRAY_SET(bitarray, test_i);
|
||||
printf("%s\n", BITARRAY_CHECK(bitarray, 9) ? "true" : "false");
|
||||
}
|
||||
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
Color *pixels = malloc(RES_X * RES_Y * sizeof(Color));
|
||||
struct camera cam = {
|
||||
.min_r = -1,
|
||||
@ -129,47 +290,10 @@ int main() {
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
printf("(%.6f, %.6f) - (%.6f, %.6f)\n", cam.min_r, cam.min_i, cam.max_r, cam.max_i);
|
||||
{
|
||||
int32_t scale_i = DOUBLE_TO_FIXED((cam.max_i - cam.min_i) / (double)RES_Y);
|
||||
int32_t scale_r = DOUBLE_TO_FIXED((cam.max_r - cam.min_r) / (double)RES_X);
|
||||
int32_t c_i = DOUBLE_TO_FIXED(cam.max_i);
|
||||
int32_t c_r, z_i, z_r, zn_i, zn_r;
|
||||
int32_t z_r_2, z_i_2;
|
||||
printf("(%.21f, %.21f) - (%.21f, %.21f)\n", cam.min_r, cam.min_i, cam.max_r, cam.max_i);
|
||||
|
||||
int i;
|
||||
int min = INT_MAX;
|
||||
int max = INT_MIN;
|
||||
for(int y = 0; y < RES_Y; y++) {
|
||||
c_r = DOUBLE_TO_FIXED(cam.min_r);
|
||||
for(int x = 0; x < RES_X; x++) {
|
||||
z_i = 0;
|
||||
z_r = 0;
|
||||
for(i = 0; i < ITERS; i++) {
|
||||
z_r_2 = FIXED_MULTIPLY(z_r, z_r);
|
||||
z_i_2 = FIXED_MULTIPLY(z_i, z_i);
|
||||
|
||||
zn_r = z_r_2 - z_i_2 + c_r;
|
||||
|
||||
#ifdef SHIP
|
||||
zn_i = abs(FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + c_i;
|
||||
#else
|
||||
zn_i = (FIXED_MULTIPLY((DOUBLE_TO_FIXED(2)), (FIXED_MULTIPLY(z_r, z_i)))) + c_i;
|
||||
#endif
|
||||
|
||||
z_i = zn_i;
|
||||
z_r = zn_r;
|
||||
|
||||
if(z_i_2 + z_r_2 > INFTY_SQR_FIXED) break;
|
||||
}
|
||||
if(i > max) max = i;
|
||||
if(i < min) min = i;
|
||||
pixels[((y * RES_X) + x)] = get_color(i);
|
||||
c_r += scale_r;
|
||||
}
|
||||
c_i -= scale_i;
|
||||
}
|
||||
}
|
||||
printf("Unoptimized: %u iterations\n", mandelbrot_unoptimized(&cam, pixels));
|
||||
//printf("Border tracing: %u iterations\n", mandelbrot_unoptimized(cam, pixels);
|
||||
|
||||
BeginDrawing();
|
||||
UpdateTexture(tex, pixels);
|
||||
|
@ -1,6 +1,6 @@
|
||||
.default: make
|
||||
make:
|
||||
gcc main.c -o mandelbrot -lraylib -lm -Wall -ggdb
|
||||
gcc main.c -O0 -o mandelbrot -lraylib -lm -Wall -ggdb
|
||||
|
||||
clean:
|
||||
rm -f mandelbrot
|
||||
|
Binary file not shown.
1
stm32_buisnesscard.prf
Symbolic link
1
stm32_buisnesscard.prf
Symbolic link
@ -0,0 +1 @@
|
||||
/home/indigo/.unison/stm32_buisnesscard.prf
|
Loading…
x
Reference in New Issue
Block a user