riot-os / riot Goto Github PK
View Code? Open in Web Editor NEWRIOT - The friendly OS for IoT
Home Page: https://riot-os.org
License: GNU Lesser General Public License v2.1
RIOT - The friendly OS for IoT
Home Page: https://riot-os.org
License: GNU Lesser General Public License v2.1
The IPV6 layer does not convert the IPV6 length field to network byte order. The ICMPV6 algorithms and the IPHC algorithms use the length field for further calculation so that changing this behavious is not trivial.
sys/net/rpl
contains some German comments - not very helpful for international users.
Implement setting of callbacks for RTC alarm.
So far stdin
is not defined for all platforms (particular msp-430 is lacking a definition). Since it is used in bordermultiplex.c it should be either defined for all platforms (preferable) or replaced in this specific file.
When building the sixlowpan project for the redbee-econotag board it fails because it would exceed .text by 30-40 kB depending on the used tool chain and host platform.
reate a documentation including everything to get started with the MSB-A2 sensor platform and µkleos kernel:
At many places µkleos internal headers are included using
#include <xyz.h>
instead of using
#include "xyz.h"
.
In some cases ipv6_get_saddr
from sys/net/sixlowpan/sixlowip.c
selects multicast addresses as a source address, what does not make sense.
cause of lazy initialization of queue_node_t in func msg_send() (file core/msg.c) a data abort is possible on next call of queue_priority_add on the target thread.
To avoid the data abort the queue_node_t n.next attribute should be initialized with NULL.
The function hwtimer_wait()
internally calls hwtimer_set()
to schedule a thread_wakeup()
and then calls thread_sleep()
, If an IRQ occurs before thread_sleep()
gets called, this thread might never wake up again. One solution could be the usage of mutexes instead (as in former µkleos/FeuerWare code).
Implement POSIX layer, particular of interest:
There's a semaphore implementation in sys/net/sixlowpan
. It has to be checked for validity and moved to core
or sys/posix
.
When there is little to none free memory left, printf() messages are lost and truncated.
If not sufficient free memory becomes availiable, the program will simply not output anything anymore, but contiunes running. From the 'delay' between "memory being used up" and "no more log messages can be written" it seems like a preallocated buffer is used, when trying to allocate another buffer for printf in a low-memory situation, this fails and messages are cut off.
e.g. running test_malloc
2013-06-13 17:49:26,699 - INFO # Allocated 1024 Bytes at 0x0x7fe02c60, total 75336
2013-06-13 17:49:26,799 - INFO # Allocated 1024 Bytes at 0x0x7fe03068, total 76368
2013-06-13 17:49:26,899 - INFO # Allocated 1024 Bytes at 0x0x7fe03470, total 77400
2013-06-13 17:49:26,999 - INFO # Allocated 1024 Bytes at 0x0x7fe03878, total 78432
2013-06-13 17:49:27,089 - INFO # Free 1024 Bytes at 0x0x40002078, total 77416
2013-06-13 17:49:27,179 - INFO # Free 1024 Bytes at 0x0x40002490, total 76384
2013-06-13 17:49:27,284 - INFO # Free 1024 Bytes at 0x0x400028a8, total 75352
2013-06-13 17:49:27,374 - INFO # Free 1024 Bytes at 0x0x40002cc0, total 74320
2013-06-13 17:49:27,466 - INFO # Free 1024 Bytes at 0x0x400030d8, total 73288
2013-06-13 17:49:27,556 - INFO # Free 1024 Bytes at 0x0x400034f0, total 72256
2013-06-13 17:49:27,648 - INFO # Free 1024 Bytes at 0x0x40003908, total 71224
2013-06-13 17:49:27,744 - INFO # Free 1024 Bytes at 0x0x40003d20, total 70192
2013-06-13 17:49:27,836 - INFO # Free 1024 Bytes at 0x0x40004138, total 69160
2013-06-13 17:49:27,926 - INFO # Free 1024 Bytes at 0x0x40004550, total 68128
2013-06-13 17:49:28,016 - INFO # Free 1024 Bytes at 0x0x40004968, total 67096
2013-06-13 17:49:28,106 - INFO # Free 1024 Bytes at 0x0x40004d80, total 66064
2013-06-13 17:49:28,248 - INFO # Free 1024 Bytes at 0x0x4ocated 1024 Bytes at 0x0x40004958, total 26832
2013-06-13 17:49:28,348 - INFO # Allocated 1024 Bytes at 0x0x40004d70, total 27864
2013-06-13 17:49:28,448 - INFO # Allocated 1024 Bytes at 0x0x40005188, total 28896
2013-06-13 17:49:28,548 - INFO # Allocated 1024 Bytes at 0x0x400055a0, total 29928
2013-06-13 17:49:28,648 - INFO # Allocated 1024 Bytes at 0x0x400059b8, total 30960
(the exact point of the corruption differs with slightly different binaries, but is consistent when using the same binary)
The changes in the fcf bit field order coming through #44 are may wrong.
it should be changed back if other 802.15.4 devices expect the former order.
When change rtc_set_localtime from a static to an interface function, it was overlooked that this function does not set epoch and that rtc_time will result in wrong values.
Depending on the application, the in-process preemptive threading implementation leads to undefined behavior.
The problem manifests (at least) when returning to interrupted threads in some situations.
irq_cpu.c: In function 'print_sigmasks':
irq_cpu.c:81:15: warning: assignment from incompatible pointer type [enabled by default]
p = sched_threads[i]->stack_start;
In sixlowpan implementation the thread "lowpan_context_rem" (see /sys/net/sixlowpan/sixlowpan.c) does not wake up anymore, after I put it to sleep for a minute (in function lowpan_context_auto_remove()).
Currently the cc110x_ng driver always put the transceiver device always back to RX mode after sending. Should be changed to switch back to previous mode.
hwtimer_set functions should - platform dependent - subtract time overhead to increase precision.
The scheduler - particular the function sched_run() - comprises some possibly unnecessary checks for null pointer and so on.
Additionally, some functionality is only need with certain modules (like NSS) activated and could be excluded (using precompiler instructions) if theses modules are not active.
In the current state, the RIOT network layer tolerates only 1 IPv6 packet going in or out of the device at the same time. Outgoing packets can overwrite incoming packets and the other way around due to the fact that there is only 1 buffer for incoming and outgoing packets (IPv6 Buffer: uint8_t buffer[BUFFER_SIZE]". Find a solution to avoid overwriting of incoming/outgoing packets, especially when using fast transmissions.
The TCP layer (only!) is currently using a dirty HACK for sending packets via a separate output buffer "uint8_t ip_send_buffer[BUFFER_SIZE]" in sys/net/sixlowpan/sixlowip.c
Currently only asynchronous sending of messages is possible. An additional function to provide non-blocking message reception needs to be implemented to allow for asynchronous message reception.
1: core ....Do not include other files.. ex: hwtimer.h #include<hwtimer_cpu.h>
kernel.h #iinclude "cpu.h" "cpu-conf.h"
2: cpu.... Contains only the basic configuration and Start to main(); ex: cmsis.
3: board ... Basic configuration or BSP.
4: codes ... No crossover between various CPU or board or project..
Move the RPL implementation from sys/net/sixlowpan/rpl
to sys/net/rpl
.
The variable transceivers in sys/transceiver/transceiver.c is currently a enum. This should be changed in order to use it as a bit field.
If thread_create() gets called with CREATE_STACKTEST, it is assumed that the stack grows with increasing addresses. This is not true for all architectures.
The following arm_reset()
code is not valid for the mc1322x so it should be moved or guarded
__attribute__((naked, noreturn)) void arm_reset(void)
{
dINT();
WDTC = 0x00FFF;
WDMOD = 0x03;
WDFEED = 0xAA;
WDFEED = 0x55;
while (1);
}
Several (global) variables in sixlowpan are defined more than once and declared as extern in header files, e.g. ipv6_ext_hdr_len
, packet_length
, ipv6_buf
etc.
So far RIOT only supports platforms equipped with radio transceivers which are (physically) not 802.15.4 capable. Though RIOT provides an adaptation layer, a driver for a fully 802.15.4 capable radio is required.
vtimer replaced swtimer which is therefore marked as deprecated. But swtimer is still available in the repository and used by some libraries and projects.
I discovered some warnings...especially the last one seems to be a real problem
hwtimer_cpu.c:243:55: warning: unused parameter 'fcpu' [-Wunused-parameter]
void hwtimer_arch_init(void (*handler)(int), uint32_t fcpu)
irq_cpu.c:295:43: warning: unused parameter 'info' [-Wunused-parameter]
void native_isr_entry(int sig, siginfo_t *info, void *context)
[removed one warning (was not in master]
mutex.c:94:46: warning: unused parameter 'yield' [-Wunused-parameter]
void mutex_unlock(struct mutex_t *mutex, int yield)
vtimer.c:80:24: warning: unused parameter 'ptr' [-Wunused-parameter]
void vtimer_tick(void *ptr)
vtimer.c:112:28: warning: unused parameter 'ptr' [-Wunused-parameter]
void vtimer_callback(void *ptr)
The entire vtimer-system has some drawbacks and needs to be re-evaluated and maybe re-designed.
At the moment it is only possible to have one transceiver of each kind, i.e. 1x cc1100, 1x cc2420, etc. when using the transceiver module.
Various functions in sys/net/sixlowpan
do not use network byte order. (#18 is related) HTONS/HTONL and NTOHS/NTOHL should be used.
auto_init checks MODULE_$name defines for whether a module is present, e.g.
#ifdef MODULE_VTIMER
DEBUG("Auto init vtimer module.\n");
vtimer_init();
#endif
However, MODULE_VTIMER is defined nowhere, at least not with the new buildsystem.
According to the coding conventions and best practice no function should return a struct. However, vtimer_now() returns a struct of the type timex_t. This should be replaced by adding an output parameter.
Remove the slight changes in RTC interface in implementation for cc430 and lpc2387.
example code:
uint32_t value = 4688400; float test_secs = (float)(value); printf("Value: %lu, test_secs: %f, test_secs/1000000: %f\n", value, test_secs, test_secs/1000000.0);
output:
Value: 4688400, test_secs: -593395331576418032070107601347274796814779226477615119074935151325494288374806955180858448199930421815096455549544570545856896334085141326372559621036970412650772246306121905719839090181013742283966753869290184601151471616.000000, test_secs/1000000: 0.000000
[...] you should visit http://www.riot.os-org instead. [...]
vtimer_now() returns a timex_t struct containing seconds as well as micro-seconds. The seconds are always 0 because the global variable in sys/vtimer.c "seconds" is never increased or set. The responsible function vtimer_tick(void *ptr) is never called.
This becomes a problem when that path is a python3 as pyterm is a python2 application.
currently riot has three? different logging mechanisms: we should build one unified logging system
Currently the CC1100 transceiver is set to automatic calibration every fourth time when going from either RX or TX to IDLE. While there is no manual calibration performed at channel assignment, the first four packets after switching the channel are likely to get lost.
Node sometimes stuck in a loop when due to possible erroneous implementation of gpio interrupt debouncing.
The following variables are included in various Makefiles but never defined.
The auto_init feature is not explained - neither in the API nor in the wiki.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.