We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi, Do you have faced with this problem ? The USB debug adapter runs but the IDE debugger not. I can put breakpoint on the first line of the main but no break, no timer it generated too, when i stop running no stop on the code line executing. It seems there is a problem just before the main call.
thx
Hi, The issue is NOT 'refreshing' but 'disabling' If we can not refreshing the watchdog, i 'm afraid for the use of this chip... The handling of this issue (sorry Mr. Sardine) commonly accepted by all SILabs users (that have commented on this issue) is to disable the watchdog in startup.a51 and then enable it at the top of main().
now: Every time you build you link with that code
if not exist aoc.lib goto usliex del aoc.lib :usliex c:\%DDIR%\c51\bin\lib51 c aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCmain.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCutil.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCautil.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCkbpr.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCtool.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCusb.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OC485.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCcmd.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCvfd.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCnummsg.obj to aoc.lib >..\trash\trashbin c:\%DDIR%\c51\bin\lib51 a OCupdata.obj to aoc.lib >..\trash\trashbin if "%MUSDIR%"=="0" goto lnkdir rem linking for boot required c:\%DDIR%\c51\bin\bl51 OCstart.obj, OCintent.obj, OCisr.obj, OCxdata.obj, \ BOOTbit.obj, aoc.lib TO aoc.omf CODE(0x4000 - 0xFFFF) RS(256) IX >protl.log goto lnkdon
I do???
Erik
Note This message was edited to reduce width.
Slowly breathe in.
Slowly breathe out.
Relax.
Ahhhhhh.
Yes.
Slowly breathe in. Slowly breathe out. Relax. Ahhhhhh. the watchdog discussed here is an electronoic device, not a sleeping collie
PS Every time you build you link with that code was never the issue, the issue was init.a51. yes, there is a C_INIT or some such (I could look, but if you need the specific, look yourself) in the .m51 file which I have known for years, but AGAIN the issue was init.a51.
NO, confound it, NO from the .m51:
INPUT MODULES INCLUDED: MKSTART.OBJ (?C_STARTUP) MKINTENT.OBJ (MKINTENT) MKINTVEC.OBJ (MKINTVEC) MKISR.OBJ (MKISR) MKIIC.OBJ (MKIIC) MKXDATA.OBJ (MKXDATA) BOOTBIT.OBJ (BOOTBIT) AMK.LIB (MKMAIN) AMK.LIB (MKJ1708) AMK.LIB (MKTOOL) AMK.LIB (MKUTIL) C:\TOOLS\KEIL\C51\LIB\C51S.LIB (?C?CCASE) C:\TOOLS\KEIL\C51\LIB\C51S.LIB (?C?ICASE)
I added an initialization of a variable and then
C:\TOOLS\KEIL\C51\LIB\C51S.LIB (?C_INIT)
popped up
Although there aren't any Stupid Questions, some questions can reveal a questioner's level of competence. Its not that we thought that sardines were smart to begin with, but this insight into the Shoals of Sardine Thought is priceless...
How strange. Why would anyone impose such a rule?
(in reference to: it is 'house standard' here not to have "initialized variables at file level")
It might be that you haven't thought about it much before you posted that question, so I'll let you think about that one for a bit.
(I think that erik should provide the reason, since that would show that erik is smarter than your average fish).
</stir>
--Cpt. Vince Foster 2nd Cannon Place Fort Marcy Park, VA
ok captain, the first thing that pops into my mind is that you cannot guaranty their order of initialization...? Am I now an new member of the sardine family?
further clarification: that matter IF there are dependencies between global variables.
I can imagine situations where it may be undesirable or impossible to initialise variables before execution of main, but cannot imagine why it would be a 'house rule'.
I think that erik should provide the reason, since that would show that erik is smarter than your average fish
I doubt that Erik's ability to explain his own house rule will reveal much about his intelligence. At least I hope not.
Every time you build you link with that code was never the issue, the issue was init.a51. yes, there is a C_INIT or some such (I could look, but if you need the specific, look yourself) in the .m51 file which I have known for years, but AGAIN the issue was init.a51.
The key point is this: What code is contained in INIT.A51?
"At least I hope not."
Pride and prejudice? I thought you preached that people should have an open mind...
Jack, Could you please to us WHY you keep on launching these personal attacks. What is it with you? You don't have to preach me about freedom of expression - I believe I vehemently resisted proposals that were made here about curtailing that right. But what you are doing is the abuse of the freedom of expression - you are bullying Erik and you do so intentionally. Whether you respect his opinions or not, I believe everybody here would be much happier you just stopped. And you still did not provide an answer to his build log. You see: I'm trying to shift the discussion to where it belongs - the proper, technical realm!
Ho Jack, and PLEASE don't start to dig up dirt about me and post it proving that I contradict myself etc. I know there is enough of it as most of the usual contributes...But most of the time I try to provide useful information, with some success I think. Do you?
he rule of no variables initialized at the declaration:
It has been there 'forever', and I recall there were many reasons, but do I remember them all, I doubt it.
First, the origin of 'the rule' has nothing to do with software. A board made for the company before the company had any engineering could not do a straight movx (the latch had to be set manually - ARGH) and thus any 'automatic code' referencing xdata would fail. We then discussed whether to have the rule just for this project or global and decided for many reasons to make it global. as I recall: One I do remember was that there were state machines with 'idle' defined as all kinds of values, the 'rule' forced all idle's to be zero which saved a whole lot of lookups. The rule forces anyone to make 'inactive' a zero, again saving a whole lot of lookups. The only case where I can see a justification for 'inactive' being anything else than zero is a SFR or port bit, I have not investigated that, but I doubt you can write sbit 0x83 = 1 and come up with p0.3 a one. also it forces 'value tables' to be 'code', again an advantage. Oh, also it allow the use of #define UC xxx unsigned char where xxx is defined as extern in all modules but one.
So, what does 'the rule' buy us? consistency
of course some feel that this is restrictive, but when you want 'program responsibility' to be transferable, you need consistency.
PS Mr. Sardine owes me an apology for his bile about init always being included, but that, I am sure would be too much to ask.
erik,
Ouch. That is a bad way to generate that rule. The rule does have its merits though. I *try* to stick with that rule as much as I can, but I generally don't make it a formal rule...
Pre-initialized data "initialized variables at file level" is prone to errors and can introduce operational risks. (Where 'data' means volatile RAM space, and not in non-volatile space).
1) The "initialize before use" rule adherence is stressed where the 'at file level' is typically not close to the "use" section of code, nor is it close to "use" with respect to the time-line.
2) The centralized access to all of these 'at file level' adds a single-point risk of error into the system.
3) No assurance that the data was explicitly initialized. Any such universal "INIT.A51" type code could group many data-stores into a block and fill that memory space to the 'initialized value' (such as zero), and your ability to point to a specific set of instructions that initialized THAT data-store to THIS value is diluted.
If that 'service' of 'initializing variables at file level' wasn't there (and thus not in the "C" standard), would you then implement such a centralized service in "C" ? I think not. And the rational for not doing so, is exactly the rational you shouldn't force the validity of your code to depend upon that service.
4) Reduces the potential of assuming that a 'variable' with a pre-initialized value, is still that value when it is used. Although you may think that the data-store has never been modified before, it could have been, and what assurance do you have that it hadn't been modified prior to its invocation? (Especially when separated by much time and space).
Secondary reasons include the initialization time that can vary depending upon the amount of code that is tacked on. If the base code is released--and well characterized--and later somebody adds some help menus, you may not want the boot time to be changing every time you add a new help screen.
Although you cannot get away with never-ever using 'initialized variables at file level' all of the time, the spirit of the rule should be adhered to. An example is the need for static data-stores within functions to be initialized [to zero] is expected.
It is just that too many code-monkeys will rely on the value of pre-initialized data and generate sloppy coding habits. Especially the initialize [just] prior to use rule.
When you know that these risk areas do exist, then you can either make it a policy (aka 'rule') to keep your code-monkeys from haphazardly instituting "initializing data-stores at the file level," or you can make them aware that there are such risks, and that they should be quick to question the validity of relying on such methods when debugging, or qualifying the code.
Such practice is like being leery of using malloc( ). If you need to use it, then that's what you have to do, but you need to know about the risks.
Am I now an new member of the sardine family?
Mr. Tamir Michael... one word: No Way (just chumming the waters for ravenous sardines).
I've read your work, and you are too smart, too thoughtful, and too 'nice' to be swimming in same ocean. You're a land creature. Sardines are not.
But your first "guaranty their order of initialization" was not what I was thinking. That could be important if you had [x]data-space that was shared between autonomous sub-systems, like a DMA peripheral, or some mail-box, or a data-space cycle-stealing circuit. Then yes, it could be an order specific problem.