我正在使用mbxxx目标处理Contiki 2.7.在构建我的代码时,链接器抱怨.ARM.exidx和.data部分的重叠.在使用链接器脚本contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld进行了一些修补之后,我通过替换修复了问题:
__exidx_start = .;
__exidx_end = .;
Run Code Online (Sandbox Code Playgroud)
有:
.ARM.exidx : {
__exidx_start = .;
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .;
} >ROM_region
Run Code Online (Sandbox Code Playgroud)
后来当我试图通过使用objdump -h看到其他一些示例应用程序的标题列表时,我没有找到这个特定的.ARM.exidx部分,而它存在于我的应用程序中.谷歌搜索.ARM.exidx让我知道它用于一些c ++异常处理.由于我的代码是纯C代码,为什么这部分出现在我的代码中?通常.ARM.exidx存在于代码中,它的实用性是什么?
================================================== ================================
嗯不,我没有任何这样的编译器选项.我实际上正在使用AxTLS api并撕掉证书处理代码并将其移植到contiki.在进一步的挖掘中,我在bigint实现中发现了一个可疑的行为.简而言之......这是bigint.c文件中函数的主体:
static bigint *bi_int_multiply(BI_CTX *ctx, bigint *bia, comp b)
{
int j = 0, n = bia->size;
bigint *biR = alloc(ctx, n + 1);
comp carry = 5;
comp *r = biR->comps;
comp *a = bia->comps;
check(bia);
/* clear things to start with */
memset(r, 0, ((n+1)*COMP_BYTE_SIZE));
do …Run Code Online (Sandbox Code Playgroud) 我试图制作一个在Contiki OS上运行的传感器,以执行新的二进制文件并替换当前的二进制文件(如果发生事件)。
我正在使用Cooja模拟器和Sky note,并且将二进制文件上传到节点的Coffee文件系统中(使用Cooja脚本),我想执行hello-world.ce
要编译我将动态加载模块的当前程序(reboot.c),我使用了以下命令:
对于将要加载的hello-world,我使用了:
这是我试图执行hello-world的代码(reboot.c)的一部分
#include "contiki.h"
#include "core/loader/elfloader.h"
#include "cfs/cfs.h"
PROCESS(hello_world_process, "Reboot process");
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
int i;
int binFile,ret;
elfloader_init();
binFile=cfs_open("hello-world.ce",CFS_READ);
printf("cfs_open:%d\n",binFile); //returns 0 so the file is opened
ret=elfloader_load(binFile);
cfs_close(binFile);
printf("loader returned: %d\n",ret); //returns 0 ->meaning everything is ok
if(ret == ELFLOADER_OK){
printf("elf OK\n");
for(i=0; elfloader_autostart_processes[i] != NULL; i++) {
printf("exec: starting process …Run Code Online (Sandbox Code Playgroud) 在32位嵌入式系统上投射和修改指针时遇到了一个奇怪的问题(运行contiki OS的redbee econotag是特定的).
uint32_t array[2];
array[0] = 0x76543210;
array[1] = 0xfedcba98;
uint8_t* point = ((uint8_t*)array)+1;
printf("%08x \n", *(uint32_t*)point );
Run Code Online (Sandbox Code Playgroud)
在我的电脑上输出:
98765432
Run Code Online (Sandbox Code Playgroud)
嵌入式设备上的输出:
10765432
Run Code Online (Sandbox Code Playgroud)
我的计算机表现得像我期望的那样,但嵌入式设备似乎在它到达单词结尾时回滚.为什么会这样?
当我想在contiki-3.9/tools/cooja中运行"ant run"时,我面临以下错误:
BUILD FAILED /home/user/contiki-3.0/tools/cooja/build.xml:199:执行此行时发生以下错误:/home/user/contiki-3.0/tools/cooja/apps/mspsim/build.xml :29: - 找不到MSPSim构建文件.你运行"git submodule update --init"了吗?
但实际上我跑了
git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)
在使用"ant run"之前.
请帮助我解决这个问题,我是contiki-os的新手,应该将它用于我的硕士论文
是否有可能在contiki os中列出所有正在运行的进程并将结果输出到调试输出(即UART)?
我正在通过一个项目开始在天空中使用contiki.我正试图让空中节目现在正常工作.
我一直在查看examples/sky-shell-exec和apps/shell /.我觉得我需要通过sky-shell-exec和可能的test-deluge或codeprop提供的功能的某种组合.然而,通过代码阅读导致了一些概念上的障碍,涉及需要实现什么代码以及已经提供了什么代码以便获得一些无线编程功能(我对此非常新,并且没有太多嵌入式系统暴露在一起).我很抱歉我的问题有时模糊不清,但这是由于我一般的困惑,并不知道如何更好地进行.我主要希望得到一些小的东西(示例程序)现在可以将代码发送到mote然后使用发送的代码重新编程(例如发送的代码可能只是hello-world).
1)如何通过空中简单地将代码发送到mote?我觉得test-thluge是无线编程问题的"无线"传输部分,但是从代码中并没有完全理解它.
2)为了通过无线代码接收,应该在mote上运行什么代码?
3)我如何知道存储此代码的位置,然后知道如何加载它?我觉得这一步是天空shell-exec或多或少,但再次从代码中完全不了解它.
4)我正在网上阅读很多内容,如果代码库很大,那么无线编程是很困难的,因为ram是有限的.一般来说,我在无线传输时存储我的代码,如何知道/验证它是否在那里?另外,我怎么能简单地知道由于代码大小我是否会有内存存储问题(最终对于项目来说,需要传输大型代码库而不仅仅是单个模块)?
我再次为任何无根据的无知道歉,我意识到还有另一个类似于这个的线程,但我发现我需要对那里提到的每个组件进行更详细的解释(线程是:Contiki的Air编程).
谢谢
我想为Contiki添加一些第三方库,但目前我不能.所以我想用一个简单的库进行测试.
我在hello.c中写了两个文件hello.c hello.h我有:
printf(" Hello everbody, library call\n");
Run Code Online (Sandbox Code Playgroud)
在hello.h我有:
extern void print_hello();
Run Code Online (Sandbox Code Playgroud)
我使用命令创建了hello.o:
msp430-gcc -mmcu=msp430f1611 hello.c -o hello.o
Run Code Online (Sandbox Code Playgroud)
我创建了一个存档文件:
ar -cvq libhello.a hello.o
Run Code Online (Sandbox Code Playgroud)
我转到contiki,我编写了一个调用hello.h来执行函数的简单程序.我尝试在makefile中使用PROJECT LIBRARIES变量包含hello.a,当我编译时我得到这个:
Hello_lib.sky section .vectors' will not fit in region'vectors'
...
region vectors overflowed by 32 Bytes
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我的问题是什么(我是该领域的新手)?
如果可能的话如何纠正?(我应该为msp430-gcc指定哪些选项)谢谢.
我想加密传感器节点之间交换的消息。
我可以在没有访问真实硬件传感器节点(例如Tmote Sky)的情况下执行此操作吗?
只能在Tmote Sky节点上模拟软件加密/分组密码吗?如果我需要使用硬件加密算法,那么我应该有一个真实的传感器节点吗?
另外,我读到,对于对称加密,必须具有真实的传感器节点,但是非对称加密也可以与仿真节点一起使用吗?
任何文档或说明都将有所帮助。
我很新,正在尝试为我的Econotag建立环境。使用本指南 https://github.com/malvira/libmc1322x/wiki/libmc1322x 我收到一条错误消息。
user@instant-contiki:~$ git clone git://git.devl.org/git/malvira/libmc1322x.git
Cloning into 'libmc1322x'...
fatal: unable to connect to git.devl.org:
git.devl.org[0: 209.208.78.21]: errno=Connection refused
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题
我正在尝试使用 与直接连接到我的 PC 的 z1 mote 进行通信pyserial。我想要做的是写入节点,并在收到命令后,节点应回复当前的温度读数,例如。
Python端可以是这样的(iinm)
import serial
ser = serial.Serial(0)
ser.write("hello") # the mote will receive the message and do something
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在使用 C 的 z1 mote 端接收消息。是否有特殊的方法来接收命令,还是我必须创建自己的方法?
任何提示和提示都将不胜感激。