Well, these pages here are really brand new and if they would be ink, they would be still fluid. So, everything that I show there, that was just screenshots of the last week. So, it is this target and I think the time we have till half past 7:00? Oh, it's 7:25. Is that the true time? We can go till 8:00 if we need to. Okay, yeah. It's up to you. But you see it's only 15 pages. So, it is a good overview and you see what we can do. There are three tracing types, and I talked already about them, so it's a good reminder. Then, the Setup, just this one page, and then one, two, three, four, five, six and that is already like, I have something to solve, how can I do it? It is not that I say, "Oh, I have a wrong pointer and how can I find the cause or the location where the wrong pointer is?" That is your own work. But I tell you how you can check the system and see it in a way that you quickly find the cause. So, that are three things that I talked already about. This one and this one we saw. This one is the other one. So, the advanced trace pass is connected to the different things that you might have. What I found that my ARMv8 here. What do I bought? It does not have ETR. I wanted to show it, it was ARM 64-bit, but this port doesn't have a ETR so I cannot show it with bit trace, but I can still do it with the ETB. Here, the trace data is going to onchip SRAM and it's very small and so, because of the size of the buffer, it is almost not possible to make any kind of performance measurement. It's just like a few thousand entries. Out tool, what I have on the table, it has gigabyte or it can even work in stream mode. So, you dump it all to the hottest drive. It's almost unlimited, we say, several terabyte. It's at a high frequency also. The ETR, it's quite good because you saw the connection, yeah? Even if this connection here has little green cable, it's co-axial cable. So, it's good for high frequencies, but it does not really help. If you have a bad design on the target board then the signals, the skew is so bad that you cannot really pick up the signals as they are needed. We have technology, that is the reason why that is called autofocus. This device had a preprocessor. So we look for the [inaudible] and so, but sometimes the targets are really tricky. So, it's better if you simply route it directly on the target from the trace source to the trace synchronous DRAM. That needs no connection with a cable and so on. Also, what chip manufacturers prefer was this one. We have it's upcoming, we cannot avoid it. This one is still amazing technology, but if the chip manufacturer hears that we need 16 lines and a connector, yeah, quickly dumps. So then, the ETR is the choice often. Okay then, this is quickly how it looks like. You remember this already. So, we have Trace Port Interface Unit and other things could be multiplex with GPIOs so you need to enable the TPIU pins, then you need to set up the CoreSight system with addresses, then you specify the PortSize here, yeah, 16-bit and continuous mode, no control, signals. Then, the last one is the control window for analyzer. Simply A is enough or capitalized letters is enough for control or trace. We also say simply trace, here trace. So, that is the control where you see the buffer size. So, it's like, what is that, 536 million entries are possible, and currently nothing used and we are sampling at a first-in, first-out buffer mode. So, it's like a ring buffer and the newest information is stored and the oldest one is overwritten if necessary. Here are buttons to control registers like TPIU, registers ETM, registers system trace and so on registers. So, that is how our graphic user interface offers it. If you hit this button here, out of AutoFocus function, then we say, analyzer, data capture is okay at 100 megawatts. Test pattern means that the pattern generator of the TPIU. Okay, so that is the first slide regarding- yeah, I want to hunt a bug also. So, which instructions were executed and when? You take a trace, yeah? So, used buffer is filling and then we have here record numbers. So, if you see that record number 381370, yeah, almost was zero one one. You think it's close, but it's not. There, all the 70's in between are missing and here you see them, 79, 74 and so on. So, this means, here we have the records that are in our buffer and we disassemble what was happening in between these two records. If you're missing these entries, well, here's the block, the yellow one, and it brings nothing, it's empty. So, for the execution, there was nothing going on. It's a continuous mode and here are continuously going on the ETM aisle packages. So, that is what we show you if you enter TPI, oh no, TP and TPINFO in addition to all defaults. So, this is the default and this is more specifically spread out, so idle records and we say more so we spread it to see in everything. Now, here is the ETM Atoms. If you look into the document regarding ETM version four then you will see a lot of info about ETM trace Atoms. So here, we have this Atom and it says, EEN. Here, we have other info, but EEN is the most important one that explains the protocol. So it says, executed, executed or not executed. I marked it for sure for you, so you see where that comes into counting. So, here we have branch, less or equal, branch equal and here I have a branch less equal and well, this one is a bit darker and this one is a little bit lighter color. So, this one was not executed. This branch was not taken and so it's continued here straight forward by the addresses. Now, okay here, oh well, that's maybe not so important. Okay, then here we have time back info. So, if you see such a value and the column says time back then this one is the time that was needed, or used, or spent to come from here. Time back. So, it refers to this older entry. So, this one here was 0.7 microseconds later than this one. Okay, so if you have now information about what was executed, and you have a timestamp, and you see how long it took till it was executed, and if you have not only relative time, we could also here, instead of time back, we could add some time relative, or time zero, or time reference, and so on. Then you would have cumulated time and could see the total. But, it's even better if you see that as a real timing diagram. So, how about this? So this one is a little bit nicer to see. I colored different information in different spots. So, you can see how they are connected. So with red I started usually. So, ZoomTrack, ZoomTrack. So that means, if I click here, set a cursor, this window follows to the same position. Now, this one are even the same executions. The names here are the same, same sequence almost and here's a little bit something different. Well, you recognize this bar, and this bar is the same, this bar and this was the same, but what is happening here? That is the reason why I marked it in this orange here. What is here? What is there? Why are they different in the display? You take a closer look then you see here, that is called function 2C and there are some other instructions executed but it's not a FUNC name. That is just what we chose but it has underscore something here, and here you don't see them. So, when we take a trace. What you see here that has instructions or that were executed on the CPU. If the CPU was executing code that is not a high level language function, it doesn't have a function entry, function exit, then it's something in between. You see function 2C has a lot going on in between. So that is like assembler code, let's say. So it is not really dysfunction and symbol says, we are checking for the address. This address, does not belong to functions 2C, but it's executed for the function 2C. Can you show the tree? Yes. We will see even a tree later. Yes. That's what is like, right? Yes. That, okay. That is, the next step what I show here on this slide. Because why should I show both of them? Here you have this horizontal line the pink frame here, yes? So that says func so there is only functions, they are missing here. So, there's no line. So we show this line, as an indication, it was not ended. So this function here main, was not terminated, here it was really executed. But then, this one was executed. But function main didn't have an exit, real function exit. So that means function main is all the time, a kind of in a sleep. Sometimes it has something to do, it's calling a different function. So that is really a display like he said. That is like subroutine, you can really see it, yes. So, also here he has like going down, and going back up, and down here to that one. So you can see main was calling function two C, then it came back to main, and then it was calling function two D, and later it was function main was calling function six, or something, yes. Well now, this one is already a super spread out chart. Yes. Usually, black and white bars, give a gray display. So usually like here, everything would be gray and if you zoom in, then you see the black and white areas. You can measure the time, and just see this little execution time, from cursor to- I do not remember what W means, anyway where you have your pointer, is only 4.6 micro seconds.This one here, is ten microseconds. That one I faked it. I placed it from somewhere else, that is not true. If that is four microseconds here, then this one is 20 micro seconds. Okay. I just wanted to show if you make a right mouse click, if you pull here and you mark it, then you get the time information here. Okay. You can find it. So like I said, if you do not zoom then everything is gray and you'll see nothing, and you can find, trace the yellow one, here is the find button. So you click there, and you can find, for example, function two D. Function two D is really here, that's the reason why this blue bar here marked, and it was also here it's also function two D. Because of the tracking, all the windows are following and synchronized and you find in different ways, you can look at the same situation and that helps you. Next one. How often, did it happened during the recording? And show a nesting. That is a different display, but that is what you are looking for. So that is a tree display, and the way how you have to understand this, is like main, is where we came from. We do not have information where main was called from. We call it root. So main was the first that we know, and main as a straight line down, is calling all the other functions. So, main was calling function two, and function two is special. It is calling function one, as a subroutine. Then after this done, and it's done three times. After that is done it continuous with all the other functions, and then we come to function nine, which is also calling function one, and this one calls it four times. Then further down, you find function 13, which is calling itself. But, when you see this corner, and it goes back to the straight line from main, that means it returns, it returns, it returns, it returns. So it's not out of control. It was calling itself the function. But it had in control and returns later. You see it also in this display, we call that nesting. So that is the nesting of the function and if you click here, on a plus sign, then it opens up, after clicking on the plus or minus sign, to collapse it, and if you open it, then you see the code inside this display. So you understand which function is it here. So you could also click on this plus sign, and you would see the code of function 11. So function 10, 11 they were just running and ended. Function 10 and 11. But function 13, was calling itself. So function 13 calling itself and so on. Okay. Here you have columns, a lot of columns and they might be also interesting. So really, you saw the chart and the timing. So if we have execution, and we have a timestamp, everything else is mathematics. So you don't need to calculate, you don't need to check that. There might be something that you wonder about. For example, here I say, it would be better to have cycle accurate tracing, because here the min time is zero and the max time 20. So an average they say, it's six well average, uses 20, divided by four, is about six here. It might be related to the calling time, and returning time functions. Okay and here we have internal, external and total. You know already, that function one here and there was like a sub-function, and so, it is like an external time for function nine. You see function one has 24, and here 24, and that is the external timer function nine. Can we trace- interrupt sub-routines too? That is exactly this that you see here. So external interrupt times, and external interrupt times maximum, that's what follows here. If you had interrupt times, the best situation is, if you have the compiler setup the way that the compiler is already marking interrupts. When we get the information with the L files, debug files and know already which functions are interrupts, then we mark them, then they will have an arrow sign here in front. So and they are listed at the end of the list. So interrupt at the end of the list, because they are not called from the function, there are interrupts. If you would scroll down, there might be something, maybe not, and we would show it here. If the information is missing in the compiler output, you can manually arrange it. So if you know which address range belongs to an interrupt, you can tell us, by some commands and then we mark it, and then we calculate out of the total calculation. Here's config, and you see configures here, this button, so you can configure which columns you want to have. For example, the average is often not so interesting. But the count, count is sometimes at the end, but I like it to spreaded further here in front so I can explain also that three times and so you can adjust it as you like it. Here next slide, it's telling about the maximum times, because if you see timing, minimum times is rarely what you're interested in, that means it was quick. But maybe it's something missing, but if something is missing then there's somewhere else's problem, not in the short execution time itself. But the long execution time is interesting to check. So we have things in our tool that checking for maximum times. So here orange, yellow, brown that is where you find these things. The bookmarks, that is the bookmark and it says even when you use this right mouse click menu, says even function one maximum, was- when this record was sampled, and that was at the zero time 848 seconds. If you look for this number here, then you will find here, that's 495, that's 486. That is really the spot where function one comes up. Use the caller function one. So if redefined it in history, where it happened, that this function took the most time. You see also, what I explained with a previous slide already here, three times function one and here four times function one makes seven times. If you do the duration like here, duration analyses, so there are more features, some are called linkage here for example, this is telling you about function one was called from function nine and function two. So a lot of information possible with right mouse clicks, and this one is the function duration, and it tells you that all the time the execution time for dysfunction was in the range, from two point something microseconds and it was not much different. You can spread it out, here's the zoom. You can spread it out and check really for a difference, and you will find a difference for sure, because we see it already here, min time, max time. Something else? No, I think that's everything with this slide.