[{"data":1,"prerenderedAt":1232},["ShallowReactive",2],{"docs-nav-docs_cs":3,"docs-page-\u002Fcs\u002Fdevice-sdk\u002Fvariable-addresses":366,"docs-surround-\u002Fcs\u002Fdevice-sdk\u002Fvariable-addresses":1229},[4],{"title":5,"path":6,"stem":7,"children":8},"Cs","\u002Fcs","cs",[9,13,41,58,76,103,157,171,190,211,238,282,302],{"title":10,"path":6,"stem":11,"navTitle":12},"Dokumentace QInsight","cs\u002Findex","Přehled",{"title":14,"navTitle":15,"path":16,"stem":17,"children":18,"page":40},"Začínáme",null,"\u002Fcs\u002Fgetting-started","cs\u002F01.getting-started",[19,23,27,31,36],{"title":20,"path":21,"stem":22,"navTitle":20},"Co je QENEX Suite","\u002Fcs\u002Fgetting-started\u002Fwhat-is-qenex-suite","cs\u002F01.getting-started\u002F1.what-is-qenex-suite",{"title":24,"path":25,"stem":26,"navTitle":24},"Co je QInsight","\u002Fcs\u002Fgetting-started\u002Fwhat-is-qinsight","cs\u002F01.getting-started\u002F2.what-is-qinsight",{"title":28,"path":29,"stem":30,"navTitle":28},"Instalace","\u002Fcs\u002Fgetting-started\u002Finstallation","cs\u002F01.getting-started\u002F3.installation",{"title":32,"path":33,"stem":34,"navTitle":35},"Uživatelské rozhraní QInsight","\u002Fcs\u002Fgetting-started\u002Fthe-qinsight-interface","cs\u002F01.getting-started\u002F4.the-qinsight-interface","Uživatelské rozhraní",{"title":37,"path":38,"stem":39,"navTitle":37},"Licencování","\u002Fcs\u002Fgetting-started\u002Flicensing","cs\u002F01.getting-started\u002F5.licensing",false,{"title":42,"navTitle":15,"path":43,"stem":44,"children":45,"page":40},"První projekt","\u002Fcs\u002Ffirst-project","cs\u002F02.first-project",[46,50,54],{"title":47,"path":48,"stem":49,"navTitle":47},"Založení projektu","\u002Fcs\u002Ffirst-project\u002Fcreate-a-project","cs\u002F02.first-project\u002F1.create-a-project",{"title":51,"path":52,"stem":53,"navTitle":51},"Struktura projektu","\u002Fcs\u002Ffirst-project\u002Fproject-structure","cs\u002F02.first-project\u002F2.project-structure",{"title":55,"path":56,"stem":57,"navTitle":55},"Heslo projektu","\u002Fcs\u002Ffirst-project\u002Fproject-password","cs\u002F02.first-project\u002F3.project-password",{"title":59,"navTitle":15,"path":60,"stem":61,"children":62,"page":40},"Připojení zařízení","\u002Fcs\u002Fconnecting-a-device","cs\u002F03.connecting-a-device",[63,67,71],{"title":64,"path":65,"stem":66,"navTitle":64},"Přidání driveru","\u002Fcs\u002Fconnecting-a-device\u002Fadd-a-driver","cs\u002F03.connecting-a-device\u002F1.add-a-driver",{"title":68,"path":69,"stem":70,"navTitle":68},"Přidání protokolu","\u002Fcs\u002Fconnecting-a-device\u002Fadd-a-protocol","cs\u002F03.connecting-a-device\u002F2.add-a-protocol",{"title":72,"path":73,"stem":74,"navTitle":75},"Propojení driveru a protokolu","\u002Fcs\u002Fconnecting-a-device\u002Flink-driver-and-protocol","cs\u002F03.connecting-a-device\u002F3.link-driver-and-protocol","Propojení",{"title":77,"navTitle":15,"path":78,"stem":79,"children":80,"page":40},"Proměnné","\u002Fcs\u002Fvariables","cs\u002F04.variables",[81,85,89,93,98],{"title":82,"path":83,"stem":84,"navTitle":82},"Co je proměnná","\u002Fcs\u002Fvariables\u002Fwhat-is-a-variable","cs\u002F04.variables\u002F1.what-is-a-variable",{"title":86,"path":87,"stem":88,"navTitle":86},"Konverze a prezentace","\u002Fcs\u002Fvariables\u002Fconversion-and-presentation","cs\u002F04.variables\u002F2.conversion-and-presentation",{"title":90,"path":91,"stem":92,"navTitle":90},"Přidání proměnné","\u002Fcs\u002Fvariables\u002Fadd-a-variable","cs\u002F04.variables\u002F3.add-a-variable",{"title":94,"path":95,"stem":96,"navTitle":97},"Proměnná Matrix (pole, křivka, mapa)","\u002Fcs\u002Fvariables\u002Fmatrix-variable","cs\u002F04.variables\u002F4.matrix-variable","Proměnná Matrix",{"title":99,"path":100,"stem":101,"navTitle":102},"Události (Events)","\u002Fcs\u002Fvariables\u002Fevents","cs\u002F04.variables\u002F5.events","Události",{"title":104,"navTitle":15,"path":105,"stem":106,"children":107,"page":40},"Vizualizace","\u002Fcs\u002Fvisualization","cs\u002F05.visualization",[108,113,118,122,127,132,137,142,147,152],{"title":109,"path":110,"stem":111,"navTitle":112},"Vytvoření pracovní plochy","\u002Fcs\u002Fvisualization\u002Fcreate-a-workspace","cs\u002F05.visualization\u002F1.create-a-workspace","Pracovní plocha",{"title":114,"path":115,"stem":116,"navTitle":117},"Zápis hodnot do zařízení","\u002Fcs\u002Fvisualization\u002Fwrite-to-device","cs\u002F05.visualization\u002F10.write-to-device","Zápis do zařízení",{"title":119,"path":120,"stem":121,"navTitle":119},"Přidání controlu","\u002Fcs\u002Fvisualization\u002Fadd-a-control","cs\u002F05.visualization\u002F2.add-a-control",{"title":123,"path":124,"stem":125,"navTitle":126},"Navázání controlu na proměnnou","\u002Fcs\u002Fvisualization\u002Fbind-a-control","cs\u002F05.visualization\u002F3.bind-a-control","Navázání controlu",{"title":128,"path":129,"stem":130,"navTitle":131},"Graph — časový průběh signálů","\u002Fcs\u002Fvisualization\u002Fgraph-control","cs\u002F05.visualization\u002F4.graph-control","Graph",{"title":133,"path":134,"stem":135,"navTitle":136},"XY Graph — signál proti signálu","\u002Fcs\u002Fvisualization\u002Fxy-graph-control","cs\u002F05.visualization\u002F5.xy-graph-control","XY Graph",{"title":138,"path":139,"stem":140,"navTitle":141},"Gauge — ukazatel okamžité hodnoty","\u002Fcs\u002Fvisualization\u002Fgauge-control","cs\u002F05.visualization\u002F6.gauge-control","Gauge",{"title":143,"path":144,"stem":145,"navTitle":146},"Single-Signal — hodnota s popiskem","\u002Fcs\u002Fvisualization\u002Fsignal-control","cs\u002F05.visualization\u002F7.signal-control","Single-Signal",{"title":148,"path":149,"stem":150,"navTitle":151},"Watch Table — tabulka proměnných","\u002Fcs\u002Fvisualization\u002Fwatch-table-control","cs\u002F05.visualization\u002F8.watch-table-control","Watch Table",{"title":153,"path":154,"stem":155,"navTitle":156},"Matrix control — mapy a kalibrace","\u002Fcs\u002Fvisualization\u002Fmatrix-control","cs\u002F05.visualization\u002F9.matrix-control","Matrix control",{"title":158,"navTitle":15,"path":159,"stem":160,"children":161,"page":40},"Běh a sledování","\u002Fcs\u002Frunning","cs\u002F06.running",[162,166],{"title":163,"path":164,"stem":165,"navTitle":163},"Spuštění a zastavení","\u002Fcs\u002Frunning\u002Fstart-and-stop","cs\u002F06.running\u002F1.start-and-stop",{"title":167,"path":168,"stem":169,"navTitle":170},"Sledování živých dat","\u002Fcs\u002Frunning\u002Fwatching-live-data","cs\u002F06.running\u002F2.watching-live-data","Živá data",{"title":172,"navTitle":15,"path":173,"stem":174,"children":175,"page":40},"Logování a přehrávání","\u002Fcs\u002Flogging-and-replay","cs\u002F07.logging-and-replay",[176,180,185],{"title":177,"path":178,"stem":179,"navTitle":177},"Logování dat","\u002Fcs\u002Flogging-and-replay\u002Flogging-data","cs\u002F07.logging-and-replay\u002F1.logging-data",{"title":181,"path":182,"stem":183,"navTitle":184},"Přehrávání logu","\u002Fcs\u002Flogging-and-replay\u002Freplaying-a-log","cs\u002F07.logging-and-replay\u002F2.replaying-a-log","Přehrávání",{"title":186,"path":187,"stem":188,"navTitle":189},"Export dat","\u002Fcs\u002Flogging-and-replay\u002Fexporting-data","cs\u002F07.logging-and-replay\u002F3.exporting-data","Export",{"title":191,"navTitle":15,"path":192,"stem":193,"children":194,"page":40},"Python skripty","\u002Fcs\u002Fpython-scripts","cs\u002F08.python-scripts",[195,199,203,207],{"title":196,"path":197,"stem":198,"navTitle":12},"Přehled skriptů","\u002Fcs\u002Fpython-scripts\u002Fscripts-overview","cs\u002F08.python-scripts\u002F1.scripts-overview",{"title":200,"path":201,"stem":202,"navTitle":200},"Přístup k proměnným","\u002Fcs\u002Fpython-scripts\u002Faccessing-variables","cs\u002F08.python-scripts\u002F2.accessing-variables",{"title":204,"path":205,"stem":206,"navTitle":204},"Příklad skriptu","\u002Fcs\u002Fpython-scripts\u002Fexample-script","cs\u002F08.python-scripts\u002F3.example-script",{"title":208,"path":209,"stem":210,"navTitle":208},"Post-processing CSV","\u002Fcs\u002Fpython-scripts\u002Fcsv-post-processing","cs\u002F08.python-scripts\u002F4.csv-post-processing",{"title":212,"navTitle":15,"path":213,"stem":214,"children":215,"page":40},"Vlastní rozšíření","\u002Fcs\u002Fcustom-extensions","cs\u002F09.custom-extensions",[216,220,224,228,233],{"title":217,"path":218,"stem":219,"navTitle":217},"Vlastní driver","\u002Fcs\u002Fcustom-extensions\u002Fcustom-driver","cs\u002F09.custom-extensions\u002F1.custom-driver",{"title":221,"path":222,"stem":223,"navTitle":221},"Vlastní protokol","\u002Fcs\u002Fcustom-extensions\u002Fcustom-protocol","cs\u002F09.custom-extensions\u002F2.custom-protocol",{"title":225,"path":226,"stem":227,"navTitle":225},"Vlastní Control","\u002Fcs\u002Fcustom-extensions\u002Fcustom-control","cs\u002F09.custom-extensions\u002F3.custom-control",{"title":229,"path":230,"stem":231,"navTitle":232},"Kompletní ukázka — poloha ISS","\u002Fcs\u002Fcustom-extensions\u002Fiss-example","cs\u002F09.custom-extensions\u002F4.iss-example","Ukázka ISS",{"title":234,"path":235,"stem":236,"navTitle":237},"Kompletní ukázka — teploměr","\u002Fcs\u002Fcustom-extensions\u002Ftemp-sensor-example","cs\u002F09.custom-extensions\u002F5.temp-sensor-example","Ukázka teploměr",{"title":239,"navTitle":15,"path":240,"stem":241,"children":242,"page":40},"QFW SDK","\u002Fcs\u002Fdevice-sdk","cs\u002F10.device-sdk",[243,248,253,258,263,268,272,277],{"title":244,"path":245,"stem":246,"navTitle":247},"QFW SDK — úvod","\u002Fcs\u002Fdevice-sdk\u002Fintroduction","cs\u002F10.device-sdk\u002F1.introduction","Úvod",{"title":249,"path":250,"stem":251,"navTitle":252},"XCP v QFW SDK","\u002Fcs\u002Fdevice-sdk\u002Fxcp","cs\u002F10.device-sdk\u002F2.xcp","XCP",{"title":254,"path":255,"stem":256,"navTitle":257},"Integrace krok za krokem: XCP on TCP s FreeRTOS + lwIP","\u002Fcs\u002Fdevice-sdk\u002Fintegration-tcp","cs\u002F10.device-sdk\u002F3.integration-tcp","Integrace: XCP on TCP",{"title":259,"path":260,"stem":261,"navTitle":262},"XCP on classic CAN — co se mění","\u002Fcs\u002Fdevice-sdk\u002Fcan","cs\u002F10.device-sdk\u002F4.can","XCP on classic CAN",{"title":264,"path":265,"stem":266,"navTitle":267},"Integrace bez RTOS: XCP on TCP z hlavní smyčky","\u002Fcs\u002Fdevice-sdk\u002Fbaremetal","cs\u002F10.device-sdk\u002F5.baremetal","Integrace bez RTOS",{"title":269,"path":270,"stem":271,"navTitle":269},"Kontrakt enginu","\u002Fcs\u002Fdevice-sdk\u002Fengine-contract","cs\u002F10.device-sdk\u002F6.engine-contract",{"title":273,"path":274,"stem":275,"navTitle":276},"Adresy proměnných pro QInsight","\u002Fcs\u002Fdevice-sdk\u002Fvariable-addresses","cs\u002F10.device-sdk\u002F7.variable-addresses","Adresy proměnných",{"title":278,"path":279,"stem":280,"navTitle":281},"Řešení potíží při integraci SDK","\u002Fcs\u002Fdevice-sdk\u002Ftroubleshooting","cs\u002F10.device-sdk\u002F8.troubleshooting","Řešení potíží",{"title":283,"navTitle":15,"path":284,"stem":285,"children":286,"page":40},"Reference","\u002Fcs\u002Freference","cs\u002F11.reference",[287,291,295,299],{"title":288,"path":289,"stem":290,"navTitle":288},"Drivery","\u002Fcs\u002Freference\u002Fdrivers","cs\u002F11.reference\u002F1.drivers",{"title":292,"path":293,"stem":294,"navTitle":292},"Protokoly","\u002Fcs\u002Freference\u002Fprotocols","cs\u002F11.reference\u002F2.protocols",{"title":296,"path":297,"stem":298,"navTitle":296},"Controls","\u002Fcs\u002Freference\u002Fcontrols","cs\u002F11.reference\u002F3.controls",{"title":281,"path":300,"stem":301,"navTitle":281},"\u002Fcs\u002Freference\u002Ftroubleshooting","cs\u002F11.reference\u002F4.troubleshooting",{"title":303,"navTitle":15,"path":304,"stem":305,"children":306,"page":40},"Příklady","\u002Fcs\u002Fexamples","cs\u002F12.examples",[307,311,316,321,326,330,334,338,342,346,351,356,361],{"title":308,"path":309,"stem":310,"navTitle":308},"Simulace: všechny signály","\u002Fcs\u002Fexamples\u002Fsimulation-all-signals","cs\u002F12.examples\u002F01.simulation-all-signals",{"title":312,"path":313,"stem":314,"navTitle":315},"Modbus RTU master po sériové lince","\u002Fcs\u002Fexamples\u002Fserial-modbus-master","cs\u002F12.examples\u002F02.serial-modbus-master","Modbus RTU master",{"title":317,"path":318,"stem":319,"navTitle":320},"Modbus RTU slave se simulovanými senzory","\u002Fcs\u002Fexamples\u002Fserial-modbus-slave","cs\u002F12.examples\u002F03.serial-modbus-slave","Modbus RTU slave",{"title":322,"path":323,"stem":324,"navTitle":325},"Modbus TCP master přes TCP klienta","\u002Fcs\u002Fexamples\u002Ftcp-client-modbus-master","cs\u002F12.examples\u002F04.tcp-client-modbus-master","Modbus TCP master",{"title":327,"path":328,"stem":329,"navTitle":327},"Modbus TCP slave na TCP serveru","\u002Fcs\u002Fexamples\u002Ftcp-server-modbus-slave","cs\u002F12.examples\u002F05.tcp-server-modbus-slave",{"title":331,"path":332,"stem":333,"navTitle":331},"Bitové pole a skript","\u002Fcs\u002Fexamples\u002Fbit-field-script","cs\u002F12.examples\u002F08.bit-field-script",{"title":335,"path":336,"stem":337,"navTitle":335},"Dvě ECU najednou","\u002Fcs\u002Fexamples\u002Ftwo-ecus","cs\u002F12.examples\u002F09.two-ecus",{"title":339,"path":340,"stem":341,"navTitle":339},"Poloha ISS naživo","\u002Fcs\u002Fexamples\u002Fiss-live-tracking","cs\u002F12.examples\u002F10.iss-live-tracking",{"title":343,"path":344,"stem":345,"navTitle":343},"Simulovaný teploměr","\u002Fcs\u002Fexamples\u002Fsimul-temp-measure","cs\u002F12.examples\u002F11.simul-temp-measure",{"title":347,"path":348,"stem":349,"navTitle":350},"JSON signály z Python generátoru","\u002Fcs\u002Fexamples\u002Fjson-signal-python","cs\u002F12.examples\u002F12.json-signal-python","JSON signály z Pythonu",{"title":352,"path":353,"stem":354,"navTitle":355},"Raw CAN rámce z Raspberry","\u002Fcs\u002Fexamples\u002Fraw-can-python","cs\u002F12.examples\u002F13.raw-can-python","Raw CAN z Raspberry",{"title":357,"path":358,"stem":359,"navTitle":360},"XCP on TCP na NUCLEO-H723ZG: měření, stimulace a kalibrační mapy","\u002Fcs\u002Fexamples\u002Ftcp-client-xcp-nucleo-maps","cs\u002F12.examples\u002F14.tcp-client-xcp-nucleo-maps","XCP on TCP na NUCLEO-H723ZG",{"title":362,"path":363,"stem":364,"navTitle":365},"XCP on CAN na NUCLEO-H723ZG: měření, stimulace a kalibrační mapy","\u002Fcs\u002Fexamples\u002Fcan-xcp-nucleo-maps","cs\u002F12.examples\u002F15.can-xcp-nucleo-maps","XCP on CAN na NUCLEO-H723ZG",{"id":367,"title":273,"body":368,"description":1224,"extension":1225,"meta":1226,"navTitle":276,"navigation":1000,"path":274,"seo":1227,"stem":275,"__hash__":1228},"docs_cs\u002Fcs\u002F10.device-sdk\u002F7.variable-addresses.md",{"type":369,"value":370,"toc":1216},"minimark",[371,375,396,419,427,438,614,822,825,833,866,880,884,938,949,1012,1054,1079,1085,1108,1114,1118,1168,1185,1203,1207,1212],[372,373,273],"h1",{"id":374},"adresy-proměnných-pro-qinsight",[376,377,378,382,383,387,388,391,392,395],"p",{},[379,380,381],"strong",{},"Proč:"," QInsight nemá A2L. Každá proměnná je adresována absolutní\nadresou objektu v obrazu vašeho firmwaru (",[384,385,386],"code",{},"address=\"0x…\"",",\n",[384,389,390],{},"addressExtension=\"0\""," v Comm params) a tato adresa se může s ",[379,393,394],{},"každým\nsestavením"," posunout. Balíček obsahuje dva nástroje, které adresy vyčtou\nz ladicích informací DWARF v ELF souboru a vytvoří soubor pro import do\nQInsight, takže žádnou adresu nepíšete ručně.",[376,397,398,399,402,403,406,407,410,411,414,415,418],{},"Požadavky: Python 3 a ",[384,400,401],{},"pip install pyelftools","; ELF musí obsahovat ladicí\ninformace (",[384,404,405],{},"-g",", které preset CubeMX ",[384,408,409],{},"Debug"," má — ",[384,412,413],{},"Release"," s ",[384,416,417],{},"-g0"," ne).",[420,421,423,426],"h2",{"id":422},"toolself_vars_scanpy-vše-řídí-jeden-soubor-json",[384,424,425],{},"tools\u002Felf_vars_scan.py"," — vše řídí jeden soubor JSON",[376,428,429,430,433,434,437],{},"Zkopírujte ",[384,431,432],{},"tools\u002Felf_vars.template.json"," k vašemu projektu, např. jako\n",[384,435,436],{},"my_firmware.vars.json",", a upravte jej:",[439,440,445],"pre",{"className":441,"code":442,"language":443,"meta":444,"style":444},"language-json shiki shiki-themes github-light github-dark-default","{\n  \"elf\": \"build\u002FDebug\u002Fmy_firmware.elf\",\n  \"folders\": [ \"Core\u002FSrc\", \"App\" ],\n  \"symbols\": [ \"uwTick\" ],\n  \"output\": {\n    \"csv\": \"my_firmware.vars.csv\",\n    \"qinsight\": \"my_firmware_variables.xml\",\n    \"namespace\": \"my_ecu\"\n  },\n  \"options\": { \"includeConst\": false, \"arrays\": \"matrix\", \"maxArray\": 16, \"all\": false }\n}\n","json","",[384,446,447,456,472,493,506,515,528,541,552,558,608],{"__ignoreMap":444},[448,449,452],"span",{"class":450,"line":451},"line",1,[448,453,455],{"class":454},"szmH1","{\n",[448,457,459,463,466,470],{"class":450,"line":458},2,[448,460,462],{"class":461},"swgif","  \"elf\"",[448,464,465],{"class":454},": ",[448,467,469],{"class":468},"sNbzA","\"build\u002FDebug\u002Fmy_firmware.elf\"",[448,471,387],{"class":454},[448,473,475,478,481,484,487,490],{"class":450,"line":474},3,[448,476,477],{"class":461},"  \"folders\"",[448,479,480],{"class":454},": [ ",[448,482,483],{"class":468},"\"Core\u002FSrc\"",[448,485,486],{"class":454},", ",[448,488,489],{"class":468},"\"App\"",[448,491,492],{"class":454}," ],\n",[448,494,496,499,501,504],{"class":450,"line":495},4,[448,497,498],{"class":461},"  \"symbols\"",[448,500,480],{"class":454},[448,502,503],{"class":468},"\"uwTick\"",[448,505,492],{"class":454},[448,507,509,512],{"class":450,"line":508},5,[448,510,511],{"class":461},"  \"output\"",[448,513,514],{"class":454},": {\n",[448,516,518,521,523,526],{"class":450,"line":517},6,[448,519,520],{"class":461},"    \"csv\"",[448,522,465],{"class":454},[448,524,525],{"class":468},"\"my_firmware.vars.csv\"",[448,527,387],{"class":454},[448,529,531,534,536,539],{"class":450,"line":530},7,[448,532,533],{"class":461},"    \"qinsight\"",[448,535,465],{"class":454},[448,537,538],{"class":468},"\"my_firmware_variables.xml\"",[448,540,387],{"class":454},[448,542,544,547,549],{"class":450,"line":543},8,[448,545,546],{"class":461},"    \"namespace\"",[448,548,465],{"class":454},[448,550,551],{"class":468},"\"my_ecu\"\n",[448,553,555],{"class":450,"line":554},9,[448,556,557],{"class":454},"  },\n",[448,559,561,564,567,570,572,576,578,581,583,586,588,591,593,596,598,601,603,605],{"class":450,"line":560},10,[448,562,563],{"class":461},"  \"options\"",[448,565,566],{"class":454},": { ",[448,568,569],{"class":461},"\"includeConst\"",[448,571,465],{"class":454},[448,573,575],{"class":574},"sPgVT","false",[448,577,486],{"class":454},[448,579,580],{"class":461},"\"arrays\"",[448,582,465],{"class":454},[448,584,585],{"class":468},"\"matrix\"",[448,587,486],{"class":454},[448,589,590],{"class":461},"\"maxArray\"",[448,592,465],{"class":454},[448,594,595],{"class":574},"16",[448,597,486],{"class":454},[448,599,600],{"class":461},"\"all\"",[448,602,465],{"class":454},[448,604,575],{"class":574},[448,606,607],{"class":454}," }\n",[448,609,611],{"class":450,"line":610},11,[448,612,613],{"class":454},"}\n",[615,616,617,630],"table",{},[618,619,620],"thead",{},[621,622,623,627],"tr",{},[624,625,626],"th",{},"Klíč",[624,628,629],{},"Význam",[631,632,633,644,665,685,717,727,741,751,768,787,808],"tbody",{},[621,634,635,641],{},[636,637,638],"td",{},[384,639,640],{},"elf",[636,642,643],{},"obraz firmwaru s ladicími informacemi.",[621,645,646,651],{},[636,647,648],{},[384,649,650],{},"folders",[636,652,653,654,657,658,660,661,664],{},"složky zdrojů, jejichž proměnné chcete. Absolutní cesty fungují všude; ",[379,655,656],{},"relativní"," složka se řeší vůči souboru JSON; pokud tam neexistuje (firmware byl přeložen jinde), hledá se místo toho jako úsek cesty ve zdrojových cestách zaznamenaných v ELF — ",[384,659,483],{}," pak najde ",[384,662,663],{},"D:\u002FProjects\u002FMyEcu\u002FCore\u002FSrc\u002Fmain.c",", ať překlad běžel kdekoli. Uveďte tolik složek, kolik potřebujete. Zdroje se neparsují; složky jen vybírají, které kompilační jednotky ELF se vypíší.",[621,666,667,672],{},[636,668,669],{},[384,670,671],{},"symbols",[636,673,674,675,677,678,680,681,684],{},"volitelný seznam názvů proměnných, které se vypíší, i když jejich kompilační jednotka leží mimo ",[384,676,650],{}," — např. ",[384,679,503],{},", 1ms tick HAL, bez výpisu celé HAL (",[384,682,683],{},"options.all","). Jen prostá globální jména.",[621,686,687,692],{},[636,688,689],{},[384,690,691],{},"output.csv",[636,693,694,695,698,699,702,703,706,707,710,711,716],{},"tabulka všech proměnných: ",[384,696,697],{},"file;scope;name;type;size;address;volatile;collapsed;kind;elemType;elemSize;dim1;dim2"," (",[384,700,701],{},"kind"," = ",[384,704,705],{},"scalar"," nebo ",[384,708,709],{},"matrix",", viz ",[712,713,715],"a",{"href":714},"#pole-k%C5%99ivky-a-mapy-prom%C4%9Bnn%C3%A9-matrix","Pole, křivky a mapy",").",[621,718,719,724],{},[636,720,721],{},[384,722,723],{},"output.json",[636,725,726],{},"tytéž řádky jako JSON (volitelné).",[621,728,729,734],{},[636,730,731],{},[384,732,733],{},"output.qinsight",[636,735,736,737,740],{},"soubor pro import do QInsight (scanner za vás spustí ",[384,738,739],{},"elf_vars_to_qinsight.py","). Alespoň jeden výstup je povinný.",[621,742,743,748],{},[636,744,745],{},[384,746,747],{},"output.namespace",[636,749,750],{},"zapíše se do každé importované proměnné (volitelné).",[621,752,753,758],{},[636,754,755],{},[384,756,757],{},"options.includeConst",[636,759,760,761,764,765,767],{},"vypsat i ",[384,762,763],{},"const"," data ve flash (výchozí ",[384,766,575],{}," — nelze je měřit ani kalibrovat).",[621,769,770,775],{},[636,771,772],{},[384,773,774],{},"options.arrays",[636,776,777,779,780,782,783,786],{},[384,778,585],{}," (výchozí): každé číselné 1D\u002F2D pole je jeden řádek druhu ",[384,781,709],{}," — blok hodnot, křivka nebo mapa pro QInsight, přenášená jako jeden blok XCP. ",[384,784,785],{},"\"expand\"",": prvky jeden po druhém jako samostatné skalární proměnné.",[621,788,789,794],{},[636,790,791],{},[384,792,793],{},"options.maxArray",[636,795,796,797,800,801,414,804,807],{},"při ",[384,798,799],{},"arrays = \"expand\"",": rozepsat pole až do N prvků; delší se stanou jedním sbaleným řádkem ",[384,802,803],{},"name[0..n-1]",[384,805,806],{},"collapsed"," = 1 (výchozí 16, 0 = všechny). Sbalený řádek se do QInsight neimportuje.",[621,809,810,814],{},[636,811,812],{},[384,813,683],{},[636,815,816,817,819,820,716],{},"ignorovat ",[384,818,650],{}," a vypsat každou kompilační jednotku včetně HAL a lwIP (výchozí ",[384,821,575],{},[376,823,824],{},"Všechny relativní cesty jsou relativní ke složce souboru JSON, takže\npříkaz funguje z libovolného adresáře:",[439,826,831],{"className":827,"code":829,"language":830,"meta":444},[828],"language-text","python \u003Csdk>\u002Ftools\u002Felf_vars_scan.py my_firmware.vars.json\n","text",[384,832,829],{"__ignoreMap":444},[376,834,835,836,839,840,843,844,846,847,850,851,854,855,858,859,861,862,865],{},"Příklad obsahuje ",[384,837,838],{},"examples\u002Fnucleo_h723zg\u002Fnucleo_h723zg.vars.json","\n(",[384,841,842],{},"\"folders\": [\"app\"]",", ELF presetu ",[384,845,409],{},") a příklad bez RTOS\n",[384,848,849],{},"examples\u002Fnucleo_h723zg_baremetal\u002Fnucleo_h723zg_baremetal.vars.json",":\npřeložte příklad, spusťte nad tímto souborem scanner a získáte skalární\nproměnné demo signálů s adresami, např. ",[384,852,853],{},"gDemoSignals.channels_[0].value","\nna ",[384,856,857],{},"0x2400005C"," v přiloženém sestavení ",[384,860,409],{}," (ověřte proti vlastnímu\nsestavení), a tři maticové objekty z ",[384,863,864],{},"demo_map.c",".",[376,867,868,869,871,872,875,876,879],{},"Jména členů struktur a prvků polí se pro QInsight zplošťují\n(",[384,870,853],{}," → ",[384,873,874],{},"gDemoSignals_channels_0_value",");\npůvodní cesta v C, zdrojový soubor a adresa zůstávají v popisu proměnné:\n",[384,877,878],{},"XCP: address=\"0x2400005C\" addressExtension=\"0\"",". Bitová pole se hlásí\ns velikostí 0 a při importu se přeskakují — čtěte obsahující celé číslo a\npoužijte Bit Shift \u002F Bit Mask v QInsight.",[420,881,883],{"id":882},"pole-křivky-a-mapy-proměnné-matrix","Pole, křivky a mapy (proměnné Matrix)",[376,885,886,887,486,890,706,893,896,897,900,901,900,904,907,908,911,912,915,916,919,920,923,924,698,927,930,931,934,935,716],{},"QInsight zobrazuje kalibrační ",[379,888,889],{},"mapu",[379,891,892],{},"křivku",[379,894,895],{},"blok hodnot","\n(v terminologii ASAP2 ",[384,898,899],{},"MAP"," \u002F ",[384,902,903],{},"CURVE",[384,905,906],{},"VAL_BLK",") v\n",[712,909,910],{"href":154},"Matrix controlu"," a přenáší jej jako\n",[379,913,914],{},"jeden blok XCP"," — s block módem enginu je mapa 16 × 16 float jeden\n",[384,917,918],{},"UPLOAD"," burst a jeden blok ",[384,921,922],{},"DOWNLOAD"," na zapsané okno buněk místo\nstovek potvrzovaných paketů. Scanner exportuje každé číselné 1D nebo 2D\npole jako ",[384,925,926],{},"matrixVariable",[384,928,929],{},"options.arrays = \"matrix\"","); rozložení,\nkteré QInsight očekává, je jeden souvislý blok ",[379,932,933],{},"osa X, osa Y, data","\ns daty po řádcích (",[384,936,937],{},"data[y][x]",[376,939,940,941,944,945,948],{},"Mapu ",[379,942,943],{},"i s osami"," získáte ze scanu, když objekty pojmenujete podle této\nkonvence a udržíte je v paměti souvisle — buď jako členy jedné\nstruktury s ",[384,946,947],{},"pack(1)",", nebo jako tři po sobě jdoucí globální proměnné:",[439,950,954],{"className":951,"code":952,"language":953,"meta":444,"style":444},"language-c shiki shiki-themes github-light github-dark-default","#pragma pack(push, 1)\ntypedef struct {\n    volatile uint16_t x[16];      \u002F* X axis breakpoints, e.g. rpm            *\u002F\n    volatile uint8_t  y[16];      \u002F* Y axis breakpoints, e.g. load [%]       *\u002F\n    volatile float    data[16][16]; \u002F* data[y][x]                            *\u002F\n} IgnitionMap;\n#pragma pack(pop)\nIgnitionMap ignitionMap;          \u002F* -> one map \"ignitionMap\", 1072 B block  *\u002F\n\nvolatile uint16_t torqueCurve_x[8];   \u002F* or: \u003Cname>_x, \u003Cname>_y, \u003Cname>      *\u002F\nvolatile uint16_t torqueCurve[8];     \u002F* -> one curve \"torqueCurve\"           *\u002F\n","c",[384,955,956,961,966,971,976,981,986,991,996,1002,1007],{"__ignoreMap":444},[448,957,958],{"class":450,"line":451},[448,959,960],{},"#pragma pack(push, 1)\n",[448,962,963],{"class":450,"line":458},[448,964,965],{},"typedef struct {\n",[448,967,968],{"class":450,"line":474},[448,969,970],{},"    volatile uint16_t x[16];      \u002F* X axis breakpoints, e.g. rpm            *\u002F\n",[448,972,973],{"class":450,"line":495},[448,974,975],{},"    volatile uint8_t  y[16];      \u002F* Y axis breakpoints, e.g. load [%]       *\u002F\n",[448,977,978],{"class":450,"line":508},[448,979,980],{},"    volatile float    data[16][16]; \u002F* data[y][x]                            *\u002F\n",[448,982,983],{"class":450,"line":517},[448,984,985],{},"} IgnitionMap;\n",[448,987,988],{"class":450,"line":530},[448,989,990],{},"#pragma pack(pop)\n",[448,992,993],{"class":450,"line":543},[448,994,995],{},"IgnitionMap ignitionMap;          \u002F* -> one map \"ignitionMap\", 1072 B block  *\u002F\n",[448,997,998],{"class":450,"line":554},[448,999,1001],{"emptyLinePlaceholder":1000},true,"\n",[448,1003,1004],{"class":450,"line":560},[448,1005,1006],{},"volatile uint16_t torqueCurve_x[8];   \u002F* or: \u003Cname>_x, \u003Cname>_y, \u003Cname>      *\u002F\n",[448,1008,1009],{"class":450,"line":610},[448,1010,1011],{},"volatile uint16_t torqueCurve[8];     \u002F* -> one curve \"torqueCurve\"           *\u002F\n",[376,1013,1014,1015,1018,1019,1022,1023,1026,1027,900,1030,1033,1034,1037,1038,1041,1042,1045,1046,1049,1050,1053],{},"Pravidla, která převodník kontroluje (při porušení exportuje pole jako\nsamostatné bloky hodnot a vypíše varování): osa X má tolik bodů, kolik\nmají data sloupců, osa Y tolik, kolik mají data řádků, a X, Y i data na\nsebe v paměti navazují bez mezer (",[384,1016,1017],{},"#pragma pack(1)"," na struktuře;\n4bajtová data jako ",[384,1020,1021],{},"float"," držte na 4bajtovém offsetu — 16 + 16 bajtů os\nto splňuje). Samotné pole se stane blokem hodnot (samotné 2D pole se\nzploští po řádcích). Typy prvků se mapují jako u skalárů; osy mohou mít\nvlastní typ (",[384,1024,1025],{},"dataType"," u ",[384,1028,1029],{},"xAxis",[384,1031,1032],{},"yAxis","), typ dat je výchozím typem\nproměnné. Adresa bloku v popisu je adresa ",[379,1035,1036],{},"osy X"," (dat, nejsou-li\nosy); proměnnou přiřaďte k protokolu XCP a zkopírujte ",[384,1039,1040],{},"address"," \u002F\n",[384,1043,1044],{},"addressExtension"," přesně jako u skaláru. Navažte ji na ",[379,1047,1048],{},"periodickou","\nudálost (polluje se jako celý blok) nebo na událost ",[379,1051,1052],{},"On Request"," (čte\nse jen stiskem Read); DAQ a STIM matice nepřenášejí. Největší matice,\nkterou QInsight přenese, je 64 × 64 × 4 B dat plus osy.",[376,1055,1056,1057,1060,1061,1064,1065,1068,1069,1072,1073,1076,1077,865],{},"Příklad (",[384,1058,1059],{},"app\u002Fsrc\u002Fdemo_map.c",") obsahuje tři takové objekty: ",[384,1062,1063],{},"qfwDemoMap","\n(16 × 16 float, osy uint16 \u002F uint8), ",[384,1066,1067],{},"qfwDemoCurve"," (8 × uint16) a\n",[384,1070,1071],{},"qfwDemoBigMap"," (64 × 64 float, limit QInsight); ",[384,1074,1075],{},"qfwDemoMapOut"," je\nskalár závislý na jejich buňkách, takže Watch Table ukáže účinek\nzapsané buňky okamžitě. Použití v QInsight ukazuje kapitola\n",[712,1078,360],{"href":358},[420,1080,1082],{"id":1081},"toolself_vars_to_qinsightpy",[384,1083,1084],{},"tools\u002Felf_vars_to_qinsight.py",[376,1086,1087,1088,1090,1091,486,1094,1097,1098,387,1101,1104,1105,865],{},"Převodník stojící za ",[384,1089,733],{},"; ručně jej spouštějte jen tehdy,\nkdyž chcete jeho volby: ",[384,1092,1093],{},"--namespace",[384,1095,1096],{},"--strip-prefix \u003Cname>"," (odstranit\nz zploštělých jmen úvodní jméno struktury), ",[384,1099,1100],{},"--keep-underscores",[384,1102,1103],{},"--presentation \u003Cref>"," (přiřadit každé proměnné prezentaci),\n",[384,1106,1107],{},"--address-extension",[439,1109,1112],{"className":1110,"code":1111,"language":830,"meta":444},[828],"python \u003Csdk>\u002Ftools\u002Felf_vars_to_qinsight.py my_firmware.vars.csv -o my_firmware_variables.xml --namespace my_ecu\n",[384,1113,1111],{"__ignoreMap":444},[420,1115,1117],{"id":1116},"tři-kroky-v-qinsight","Tři kroky v QInsight",[1119,1120,1121,1132,1146],"ol",{},[1122,1123,1124,1127,1128,1131],"li",{},[379,1125,1126],{},"Scan"," po každém sestavení (",[384,1129,1130],{},"elf_vars_scan.py",", výše).",[1122,1133,1134,1137,1138,1141,1142,1145],{},[379,1135,1136],{},"Import:"," Home → Project Configuration → Variables → ",[379,1139,1140],{},"Import",",\nvyberte XML. Import ",[379,1143,1144],{},"přeskakuje jména, která v projektu už existují",",\ntakže druhý import po novém sestavení nic nezduplikuje — ale ani\nneaktualizuje adresy. Pokud se adresy posunuly, nejprve staré proměnné\nsmažte (nebo upravte jejich Comm params).",[1122,1147,1148,1151,1152,1154,1155,1157,1158,1154,1161,1164,1165,716],{},[379,1149,1150],{},"Přiřaďte"," každou proměnnou k protokolu XCP v Project Configuration a\nzkopírujte ",[384,1153,1040],{}," a ",[384,1156,1044],{}," z popisu do Comm params spolu\ns ",[384,1159,1160],{},"direction",[384,1162,1163],{},"eventRef"," (viz\n",[712,1166,90],{"href":1167},"\u002Fcs\u002Fvariables\u002Fadd-a-variable#p%C5%99i%C5%99azen%C3%AD-k-protokolu",[1169,1170,1171],"blockquote",{},[376,1172,1173,1176,1177,1180,1181,1184],{},[379,1174,1175],{},"Důležité:"," Naimportovaná (nebo ručně založená) proměnná, která není\npřiřazena k protokolu, nemá zdroj dat a ",[379,1178,1179],{},"nelze ji navázat na control",".\nPoznáte ji v Solution Exploreru: tooltip proměnné ukazuje\n",[384,1182,1183],{},"Source: not found"," a její ikona nemá modrý odznak, který přiřazené\nproměnné mají. Nápravou je krok 3 — přiřadit proměnnou k protokolu XCP\nv Project Configuration a vyplnit Comm params.",[376,1186,1187,1190,1191,1194,1195,1198,1199,1202],{},[379,1188,1189],{},"Alternativy bez nástrojů:"," linkerový ",[384,1192,1193],{},".map"," vedle ELF (vyhledat symbol,\nručně přičíst offset člena — příklad offsety fixuje přes ",[384,1196,1197],{},"static_assert","),\nnebo debugger (",[384,1200,1201],{},"print &gDemoSignals"," v gdb). Obojí scanner automatizuje.",[420,1204,1206],{"id":1205},"dále","Dále",[376,1208,1209,1211],{},[712,1210,281],{"href":279}," — regenerace projektu\nCubeMX a tabulka příznaků.",[1213,1214,1215],"style",{},"html pre.shiki code .szmH1, html code.shiki .szmH1{--shiki-default:#24292E;--shiki-dark:#E6EDF3}html pre.shiki code .swgif, html code.shiki .swgif{--shiki-default:#005CC5;--shiki-dark:#7EE787}html pre.shiki code .sNbzA, html code.shiki .sNbzA{--shiki-default:#032F62;--shiki-dark:#A5D6FF}html pre.shiki code .sPgVT, html code.shiki .sPgVT{--shiki-default:#005CC5;--shiki-dark:#79C0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":444,"searchDepth":474,"depth":474,"links":1217},[1218,1220,1221,1222,1223],{"id":422,"depth":458,"text":1219},"tools\u002Felf_vars_scan.py — vše řídí jeden soubor JSON",{"id":882,"depth":458,"text":883},{"id":1081,"depth":458,"text":1084},{"id":1116,"depth":458,"text":1117},{"id":1205,"depth":458,"text":1206},"QInsight adresuje proměnné firmwaru absolutní adresou, která se může s každým sestavením změnit — nástroje SDK elf_vars_scan.py a elf_vars_to_qinsight.py vyčtou adresy z ELF a vytvoří soubor pro import do QInsight; konfigurace JSON, export polí, křivek a map jako proměnných Matrix a tři kroky v QInsight.","md",{},{"title":273,"description":1224},"attxEVe360eBjGL_n6YJjNy_-XUtxZTdDOx711Alu3k",[1230,1231],{"title":269,"path":270,"stem":271,"navTitle":269,"children":-1},{"title":278,"path":279,"stem":280,"navTitle":281,"children":-1},1791554569897]