I downloaded this toolchain and use it: build idf v3.3-beta3-776-g3d198cd50 I checkout esp-idf to spiram-fix-test branch. I use a forked repo. I run the following to update to spiram-fix-test, on my local repo. git fetch upstream git pull upstream/spiram-fix-test master But i now get crash the last is: Last crash: abort() was called on core 1 Backtrace: 0x4008ace7 0x4008af7d 0x4010badf 0x40097d93 0x40083ffd 0x400845f1 0x4000bec7 0x4012c729 0x402a1815 0x401eb40d 0x401f7a26 0x401f8af0 0x40207065 0x40206f45 0x40207133 0x40206faf 0x402073b6 0x4020747d 0x401f4445 0x401f3344 0x401f3677 0x401f441e 0x402079d1 0x401f76e5 0x401f7892 0x40202ea6 0x4012db9a 0x4012dd9d kommykt@MacBook-Air OVMS.V3 % a2l 0x4008ace7 0x4008af7d 0x4010badf 0x40097d93 0x40083ffd 0x400845f1 0x4000bec7 0x4012c729 0x402a1815 0x401eb40d 0x401f7a26 0x401f8af0 0x40207065 0x40206f45 0x40207133 0x40206faf 0x402073b6 0x4020747d 0x401f4445 0x401f3344 0x401f3677 0x401f441e 0x402079d1 0x401f76e5 0x401f7892 0x40202ea6 0x4012db9a 0x4012dd9d Using elf file: /Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf 0x4008ace7 is in invoke_abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:156). 151 #endif 152 while (1) { 153 if (esp_cpu_in_ocd_debug_mode()) { 154 __asm__ ("break 0,0"); 155 } 156 *((int *) 0) = 0; 157 } 158 } 159 160 void abort() 0x4008af7d is in abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:171). 166 * don't overwrite that. 167 */ 168 if (esp_reset_reason_get_hint() == ESP_RST_UNKNOWN) { 169 esp_reset_reason_set_hint(ESP_RST_PANIC); 170 } 171 invoke_abort(); 172 } 173 174 175 static const char *edesc[] = { 0x4010badf is in __assert_func (../../../.././newlib/libc/stdlib/assert.c:63). 0x40097d93 is in multi_heap_free (/Users/kommykt/esp/esp-idf/components/heap/multi_heap_poisoning.c:214). 209 return; 210 } 211 multi_heap_internal_lock(heap); 212 213 poison_head_t *head = verify_allocated_region(p, true); 214 assert(head != NULL); 215 216 #ifdef SLOW 217 /* replace everything with FREE_FILL_PATTERN, including the poison head/tail */ 218 memset(head, FREE_FILL_PATTERN, 0x40083ffd is in heap_caps_free (/Users/kommykt/esp/esp-idf/components/heap/heap_caps.c:268). 263 ptr = (void *)dramAddrPtr[-1]; 264 } 265 266 heap_t *heap = find_containing_heap(ptr); 267 assert(heap != NULL && "free() target pointer is outside heap areas"); 268 multi_heap_free(heap->heap, ptr); 269 } 270 271 IRAM_ATTR void *heap_caps_realloc( void *ptr, size_t size, int caps) 272 { 0x400845f1 is in _free_r (/Users/kommykt/esp/esp-idf/components/newlib/syscalls.c:42). 37 return heap_caps_malloc_default( size ); 38 } 39 40 void IRAM_ATTR _free_r(struct _reent *r, void* ptr) 41 { 42 heap_caps_free( ptr ); 43 } 44 45 void* IRAM_ATTR _realloc_r(struct _reent *r, void* ptr, size_t size) 46 { 0x4012c729 is in DukOvmsFree(void*, void*) (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/ovms_script/src/ovms_script.cpp:442). 437 return ExternalRamRealloc(ptr, size); 438 } 439 440 void DukOvmsFree(void *udata, void *ptr) 441 { 442 free(ptr); 443 } 444 445 void DukOvmsFatalHandler(void *udata, const char *msg) 446 { 0x402a1815 is in duk_heap_mem_free (duk_heap_memory.c:406). 0x401eb40d is in duk__refcount_refzero_hstring (duk_heap_alloc.c:103). 0x401f7a26 is in duk_heaphdr_refzero (duk_heap_refcount.c:630). 0x401f8af0 is in duk_pop_2 (duk_api_stack.c:6089). 0x40207065 is in duk__enc_value (duk_bi_json.c:2240). 0x40206f45 is in duk__enc_value (duk_bi_json.c:1951). 1946 in duk_bi_json.c 0x40207133 is in duk__enc_object (duk_bi_json.c:1885). 1880 in duk_bi_json.c 0x40206faf is in duk__enc_value (duk_bi_json.c:2203). 2198 in duk_bi_json.c 0x402073b6 is in duk_bi_json_stringify_helper (duk_bi_json.c:3191). 3186 in duk_bi_json.c 0x4020747d is in duk_bi_duktape_object_enc (duk_bi_duktape.c:96). 0x401f4445 is in duk__handle_call_raw (duk_js_call.c:2276). 0x401f3344 is in duk__js_execute_bytecode_inner (duk_js_call.c:2422). 2417 in duk_js_call.c 0x401f3677 is in duk_js_execute_bytecode (duk_js_executor.c:2956). 0x401f441e is in duk__handle_call_raw (duk_js_call.c:2246). 0x402079d1 is in duk__pcall_method_raw (duk_js_call.c:2422). 2417 in duk_js_call.c 0x401f76e5 is in duk_handle_safe_call (duk_js_call.c:2475). 2470 in duk_js_call.c 0x401f7892 is in duk_safe_call (duk_api_call.c:318). 0x40202ea6 is in duk_pcall_method (duk_api_call.c:242). 237 in duk_api_call.c 0x4012db9a is in OvmsScripts::DukTapeTask() (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/ovms_script/src/ovms_script.cpp:2273). 2268 duk_get_global_string(m_dukctx, "PubSub"); 2269 duk_get_prop_string(m_dukctx, -1, "publish"); 2270 duk_dup(m_dukctx, -2); /* this binding = process */ 2271 duk_push_string(m_dukctx, msg.body.dt_event.name); 2272 duk_push_string(m_dukctx, ""); 2273 if (duk_pcall_method(m_dukctx, 2) != 0) 2274 { 2275 DukOvmsErrorHandler(m_dukctx, -1); 2276 } 2277 duk_pop_2(m_dukctx); 0x4012dd9d is in DukTapeLaunchTask(void*) (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/ovms_script/src/ovms_script.cpp:427). 422 423 void DukTapeLaunchTask(void *pvParameters) 424 { 425 OvmsScripts* me = (OvmsScripts*)pvParameters; 426 427 me->DukTapeTask(); 428 } 429 430 void* DukOvmsAlloc(void *udata, duk_size_t size) 431 { Michael Balzer <dexter@expeedo.de> ezt írta (időpont: 2020. jún. 5., P, 21:43):
See previous posts on this, you also need the fixed toolchain: https://github.com/espressif/esp-idf/issues/2892#issuecomment-501106283
Regards, Michael
Am 05.06.20 um 20:04 schrieb Tamás Kovács:
i think i don't run spiram fix. How can i use it. I must check out branch "spiram-fix-test" to run spiram fix?
Michael Balzer <dexter@expeedo.de> ezt írta (időpont: 2020. jún. 5., P, 6:58):
Tamás,
that doesn't need to be related to the pushover code. Do you run the spiram fix? I had this kind of heap corruption crashes frequently on builds without the spiram fix but not once with the fix.
Regards, Michael
Am 05.06.20 um 05:29 schrieb Tamás Kovács:
Some day's ago i enabled Pushover notifications and i get some crash after that.
The crash backtrase is: Backtrace: 0x4008b75f 0x4008b9f9 0x4010b253 0x40098c5f 0x40084361 0x40084945 0x4000bec7 0x401c1181 0x400f01e1 0x400f0dbb 0x400f0db4 0x400f0db4 0x400f0db4 0x400f0db4 0x40156109 0x401550da 0x400f3545 0x400f375e 0x400f37d5 0x400f37e5 a2l output is:
kommykt@MacBook-Air OVMS.V3 % a2l 0x4008b75f 0x4008b9f9 0x4010b253 0x40098c5f 0x40084361 0x40084945 0x4000bec7 0x401c1181 0x400f01e1 0x400f0dbb 0x400f0db4 0x400f0db4 0x400f0db4 0x400f0db4 0x40156109 0x401550da 0x400f3545 0x400f375e 0x400f37d5 0x400f37e5
Using elf file: /Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf
0x4008b75f is in invoke_abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:156).
151 #endif
152 while (1) {
153 if (esp_cpu_in_ocd_debug_mode()) {
154 __asm__ ("break 0,0");
155 }
156 *((int *) 0) = 0;
157 }
158 }
159
160 void abort()
0x4008b9f9 is in abort (/Users/kommykt/esp/esp-idf/components/esp32/panic.c:171).
166 * don't overwrite that.
167 */
168 if (esp_reset_reason_get_hint() == ESP_RST_UNKNOWN) {
169 esp_reset_reason_set_hint(ESP_RST_PANIC);
170 }
171 invoke_abort();
172 }
173
174
175 static const char *edesc[] = {
0x4010b253 is in __assert_func (../../../.././newlib/libc/stdlib/assert.c:63).
0x40098c5f is in multi_heap_free (/Users/kommykt/esp/esp-idf/components/heap/multi_heap_poisoning.c:214).
209 return;
210 }
211 multi_heap_internal_lock(heap);
212
213 poison_head_t *head = verify_allocated_region(p, true);
214 assert(head != NULL);
215
216 #ifdef SLOW
217 /* replace everything with FREE_FILL_PATTERN, including the poison head/tail */
218 memset(head, FREE_FILL_PATTERN,
0x40084361 is in heap_caps_free (/Users/kommykt/esp/esp-idf/components/heap/heap_caps.c:268).
263 ptr = (void *)dramAddrPtr[-1];
264 }
265
266 heap_t *heap = find_containing_heap(ptr);
267 assert(heap != NULL && "free() target pointer is outside heap areas");
268 multi_heap_free(heap->heap, ptr);
269 }
270
271 IRAM_ATTR void *heap_caps_realloc( void *ptr, size_t size, int caps)
272 {
0x40084945 is in _free_r (/Users/kommykt/esp/esp-idf/components/newlib/syscalls.c:42).
37 return heap_caps_malloc_default( size );
38 }
39
40 void IRAM_ATTR _free_r(struct _reent *r, void* ptr)
41 {
42 heap_caps_free( ptr );
43 }
44
45 void* IRAM_ATTR _realloc_r(struct _reent *r, void* ptr, size_t size)
46 {
0x401c1181 is in operator delete(void*) (/Volumes/build/idf/crosstool-NG/.build/src/gcc-5.2.0/libstdc++-v3/libsupc++/del_op.cc:46).
0x400f01e1 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_drop_node(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/ext/new_allocator.h:110).
105 }
106
107 // __p is not permitted to be a null pointer.
108 void
109 deallocate(pointer __p, size_type)
110 { ::operator delete(__p); }
111
112 size_type
113 max_size() const _GLIBCXX_USE_NOEXCEPT
114 { return size_t(-1) / sizeof(_Tp); }
0x400f0dbb is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1614).
1609 // Erase without rebalancing.
1610 while (__x != 0)
1611 {
1612 _M_erase(_S_right(__x));
1613 _Link_type __y = _S_left(__x);
1614 _M_drop_node(__x);
1615 __x = __y;
1616 }
1617 }
1618
0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
1607 _M_erase(_Link_type __x)
1608 {
1609 // Erase without rebalancing.
1610 while (__x != 0)
1611 {
1612 _M_erase(_S_right(__x));
1613 _Link_type __y = _S_left(__x);
1614 _M_drop_node(__x);
1615 __x = __y;
1616 }
0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
1607 _M_erase(_Link_type __x)
1608 {
1609 // Erase without rebalancing.
1610 while (__x != 0)
1611 {
1612 _M_erase(_S_right(__x));
1613 _Link_type __y = _S_left(__x);
1614 _M_drop_node(__x);
1615 __x = __y;
1616 }
0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
1607 _M_erase(_Link_type __x)
1608 {
1609 // Erase without rebalancing.
1610 while (__x != 0)
1611 {
1612 _M_erase(_S_right(__x));
1613 _Link_type __y = _S_left(__x);
1614 _M_drop_node(__x);
1615 __x = __y;
1616 }
0x400f0db4 is in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:1612).
1607 _M_erase(_Link_type __x)
1608 {
1609 // Erase without rebalancing.
1610 while (__x != 0)
1611 {
1612 _M_erase(_S_right(__x));
1613 _Link_type __y = _S_left(__x);
1614 _M_drop_node(__x);
1615 __x = __y;
1616 }
0x40156109 is in Pushover::EventListener(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_tree.h:858).
853
854 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a);
855 #endif
856
857 ~_Rb_tree() _GLIBCXX_NOEXCEPT
858 { _M_erase(_M_begin()); }
859
860 _Rb_tree&
861 operator=(const _Rb_tree& __x);
862
0x401550da is in std::_Function_handler<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*), std::_Bind<std::_Mem_fn<void (Pushover::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*)> (Pushover*, std::_Placeholder<1>, std::_Placeholder<2>)> >::_M_invoke(std::_Any_data const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, void*&&) (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/functional:600).
595 template<typename... _Args, typename _Req
596 = _Require<typename _Traits::__lvalue,
597 _CheckArgs<_Pack<_Args...>>>>
598 result_type
599 operator()(_Class* __object, _Args&&... __args) const
600 { return (__object->*_M_pmf)(std::forward<_Args>(__args)...); }
601
602 // Handle smart pointers, references and pointers to derived
603 template<typename _Tp, typename... _Args, typename _Req
604 = _Require<_NotSame<_Class, _Tp>, _NotSame<_Class*, _Tp>,
0x400f3545 is in std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*)>::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*) const (/Users/kommykt/esp/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/functional:2271).
2266 function<_Res(_ArgTypes...)>::
2267 operator()(_ArgTypes... __args) const
2268 {
2269 if (_M_empty())
2270 __throw_bad_function_call();
2271 return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
2272 }
2273
2274 #if __cpp_rtti
2275 template<typename _Res, typename... _ArgTypes>
0x400f375e is in OvmsEvents::HandleQueueSignalEvent(event_queue_t*) (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:234).
229 {
230 for (EventCallbackList::iterator itc=el->begin(); itc!=el->end(); ++itc)
231 {
232 m_current_started = monotonictime;
233 m_current_callback = *itc;
234 m_current_callback->m_callback(m_current_event, msg->body.signal.data);
235 m_current_callback = NULL;
236 }
237 }
238 }
0x400f37d5 is in OvmsEvents::EventTask() (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:185).
180 switch(msg.type)
181 {
182 case EVENT_none:
183 break;
184 case EVENT_signal:
185 HandleQueueSignalEvent(&msg);
186 break;
187 default:
188 break;
189 }
0x400f37e5 is in EventLaunchTask(void*) (/Users/kommykt/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/main/ovms_events.cpp:56).
51
52 void EventLaunchTask(void *pvParameters)
53 {
54 OvmsEvents* me = (OvmsEvents*)pvParameters;
55
56 me->EventTask();
57 }
58
59 void event_trace(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv)
60 {
-- Üdvözlettel: Kovács Tamás
_______________________________________________ OvmsDev mailing listOvmsDev@lists.openvehicles.comhttp://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Üdvözlettel: Kovács Tamás
_______________________________________________ OvmsDev mailing listOvmsDev@lists.openvehicles.comhttp://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Üdvözlettel: Kovács Tamás