历史上的今天
返回首页

历史上的今天

今天是:2025年04月21日(星期一)

正在发生

2020年04月21日 | MSP430F5438A支持基于COAP协议的通讯方案验证

2020-04-21 来源:eefocus

Demo的整体目标:支持基于COAP协议的通讯方案验证;


经过多种比对及现有资源的考虑,最终选定为如下方案,都已存在开源代码,只要做简单的适配应该就可以进行上板调试。

硬件方案:MSP430F5438A + 操作系统:ucos + 物联网套件:阿里IoT-SDK_V2.0  + IDE:IAR


由于阿里IoT-SDK_V2.0基于linux系统进行编程(尚未支持其他平台),编译器为GCC,所以在移植的过程中遇到了许多问题:

1、配置头文件目录:IAR的环境中不使用makefile,因此头文件目录需要在IAR中进行单独配置,具体的配置方法如下:

a) 右键工程名称,选中Options...



b) 找到C/C++ compiler -> Preprocessor  ;在Additional include directories:(one per line),其中$PROJ_DIR$为工程的根目录,基于该根目录配置相关的内容目录即可;

可以先单独compile每个文件,解决完编译问题后,再make进行符号表链接;



2、关键字冲突:IAR的编译器没有GCC的丰富,下面把我在编译的过程中遇到的几个问题记录如下:

a) typeof:尽管之前也做过几年C预言的嵌入式开发,但typeof的关键字还是头一次接触。由于阿里的Iot SDK中用到了linux的list库,用来支持链表操作

/**

* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry

* @pos:    the type * to use as a loop cursor.

* @n:      another type * to use as temporary storage

* @head:   the head for your list.

* @member: the name of the list_struct within the struct.

*/

#define list_for_each_entry_safe(pos, n, head, member)         

    for (pos = list_entry((head)->next, typeof(*pos), member),

         n = list_entry(pos->member.next, typeof(*pos), member);   

         &pos->member != (head);                   

         pos = n, n = list_entry(n->member.next, typeof(*n), member))


在使用到该宏的地方出现如下的编译错误,经初步判断,应该是typeof关键字不识别,typeof关键字用于获取参数的类型;经过多轮百度,未找到IAR编译环境可识别该关键字的方案;

Warning[Pe223]: function "typeof" declared implicitly D:SVN2 智能化解决方案软件工程ucos-msp430ucos-msp430ali-IoTsrcpackagesiot-coap-cCoAPExport.c 219

Warning[Pe549]: variable "cur" is used before its value is set D:SVN2 智能化解决方案软件工程ucos-msp430ucos-msp430ali-IoTsrcpackagesiot-coap-cCoAPExport.c 219

Error[Pe029]: expected an expression D:SVN2 智能化解决方案软件工程ucos-msp430ucos-msp430ali-IoTsrcpackagesiot-coap-cCoAPExport.c 219

Error[Pe059]: function call is not allowed in a constant expression D:SVN2 智能化解决方案软件工程ucos-msp430ucos-msp430ali-IoTsrcpackagesiot-coap-cCoAPExport.c 219

仔细阅读list库后,发现list库中包含两种类型的实现方案:

第1种.上述类似iterate模版的实现方案,结构体的设置较为灵活,可支持各种类型的结构体,因此typeof的关键字不可或缺;

第2种.较为传统,是基于链表结构体的实现方案,直接操作链表,因此不需要使用typeof的关键字,实现如下:

/**

* list_for_each_safe - iterate over a list safe against removal of list entry

* @pos:    the &struct list_head to use as a loop cursor.

* @n:      another &struct list_head to use as temporary storage

* @head:   the head for your list.

*/

#define list_for_each_safe(pos, n, head)

    for (pos = (head)->next, n = pos->next; pos != (head);

         pos = n, n = pos->next)


经分析,可采用接口list_for_each_safe替代list_for_each_entry_safe;高亮部分既为解决该问题的核心之处,list_entry 的定义可自行百度

/*解决前*/

void LITE_json_keys_release(list_head_t *keylist)

{

    json_key_t         *pos, *tmp;

    list_for_each_entry_safe(pos, tmp, keylist,list)

    {

        if (pos->key) {

            LITE_free(pos->key);

        }

        list_del(&pos->list);

        LITE_free(pos);

    }

}


/*解决后*/

void LITE_json_keys_release(list_head_t *keylist)

{

    json_key_t         *pos, *tmp;

    list_head_t        *list_pos, *list_tmp;

    list_for_each_safe(list_pos, list_tmp, keylist)

    {

        pos = list_entry(pos, json_key_t, list);

        if (pos->key) {

            LITE_free(pos->key);

        }

        list_del(&pos->list);

        LITE_free(pos);

    }

}


b) __restrict__:C99标准中引入了restricted指针,用以缓解C语言中指针二义性的问题。缓解指针二义性问题可用于编译器的代码优化。

LITE_sprintf((char *__restrict__)ascii + i % 16, "%c", ((buf[i] >= ' ' && buf[i] <= '~') ?  buf[i] : '.'));


IAR种出现如下编译错误,这个解决方案比较简单,直接去除__restrict__关键字,但是会牺牲部分性能;待未来再考虑这部分的优化

Error[Pe018]: expected a ")" D:SVN2 智能化解决方案软件工程ucos-msp430ucos-msp430ali-IoTsrcpackagesLITE-loglite-log.c 60


先写到这里,后续如果遇到新增问题,再进行补充;

推荐阅读

史海拾趣

极海半导体(Geehy)公司的发展小趣事

机顶盒,这一在现代家庭娱乐中占据重要地位的设备,全称为数字视频变换盒,它不仅是连接电视机与外部信号源的桥梁,更是数字电视技术与互联网融合创新的结晶。从广义上讲,机顶盒泛指所有与电视机连接的网络终端设备,它们能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字信号,并将其转换为适合电视播放的格式。

从功能划分上,机顶盒可分为数字机顶盒和网络机顶盒两大类。数字机顶盒主要负责数模转换,使模拟电视机也能收看数字电视节目;而网络机顶盒则进一步融入了互联网功能,提供更为丰富的互动娱乐体验,如在线视频、网络购物、社交媒体浏览等。近年来,随着技术的发展,网络机顶盒不断升级,支持高清、超高清视频播放,并集成人工智能技术,实现语音控制、智能推荐等功能,为用户带来更为便捷、智能的观影体验。

在技术层面,机顶盒的发展深受高清、超高清、云计算、边缘计算以及5G等新兴技术的推动。这些技术的应用不仅提升了机顶盒的性能,还为其内容的创新提供了强有力的支持。同时,随着市场竞争的加剧,机顶盒厂商不断优化产品设计,提升用户体验,以满足用户对高质量娱乐内容日益增长的需求。

综上所述,机顶盒作为家庭娱乐的重要组成部分,正通过技术的不断创新和市场的持续发展,为用户提供更加丰富、便捷、智能的观影体验。

Discera公司的发展小趣事

在成功进入军用市场后,Discera公司开始将目光投向更广阔的商用市场。他们积极与各大电子厂商合作,推广自己的CMOS MEMS谐振器产品。随着技术的不断普及和成本的降低,越来越多的商用电子产品开始采用Discera的谐振器产品,公司的市场份额也逐步扩大。

Fronter Electronics Co Ltd公司的发展小趣事

Fronter电子成立于1991年,由一群对电子技术充满热情的创业者共同创立。在公司成立初期,Fronter电子专注于电子元件的代理与销售,通过引进国际知名品牌的产品,如SUNLORD、KDS等,迅速在行业内建立了初步的声誉。公司凭借敏锐的市场洞察力和高效的供应链管理,逐步在电子元器件市场中站稳脚跟。

EDDING公司的发展小趣事

ECLIPSE公司深知,要想在竞争激烈的电子行业中保持领先地位,必须不断创新和满足用户需求。因此,公司投入大量资源用于Eclipse的研发和更新,不断推出新版本和新功能。同时,ECLIPSE公司也非常重视社区建设,通过举办开发者大会、提供在线支持等方式,积极与全球开发者互动和交流。这些努力不仅增强了Eclipse的用户黏性,也为其带来了更多的创新思路和商业机会。

Esc Electronics Corp公司的发展小趣事

随着全球化进程的加速,Esc开始寻求国际合作和业务拓展的机会。公司与国际知名企业建立了战略合作关系,共同研发新产品、开拓市场。同时,Esc还积极拓展海外市场,通过设立海外分公司、参加国际展会等方式,加强与国际市场的联系和合作。这些努力不仅为Esc带来了更多的业务机会,也提升了公司的国际影响力。

CHERRY公司的发展小趣事

90年代初,薄膜键盘凭借其低廉的价格和轻便的特性迅速占据了市场主导地位,机械键盘一度被边缘化。然而,Cherry并未放弃机械键盘业务,而是不断进行技术创新和产品升级。随着电竞行业的兴起和消费者对高品质输入设备的需求不断增加,机械键盘市场逐渐复苏。Cherry凭借其深厚的技术积累和品牌优势,成功抓住了这一市场机遇,实现了机械键盘业务的复兴。

问答坊 | AI 解惑

智能电流变送器中HART调制解调器的实现方法

引 言 先进的智能变送器是工业过程控制技术发展的需要,也是工艺过程实现高精度控制的必需,具有很好的市场前景。现场总线是目前国际上过程控制领域的一个热点,通过现场总线,数字通信技术可以延伸到现场仪表,给控制体系带来一场革命。HART协议作 ...…

查看全部问答>

请问附件中的mic接口为什么左右两个声道可以接到一个音频线上?

如题: 还有什么时候应该把左右两个声道接一条音频信号,什么时候应该把两个声道分开接,多谢指教,不胜感激!…

查看全部问答>

这道题我看不明白,谁能帮忙解释一下,谢谢!!

一台处理机具有如下指令格式    2位  6位  3位    3位 X         OP        源寄存器        目标寄存器        地  址 & ...…

查看全部问答>

部署SqlCe

我已经懂得怎么生成.net   compact项目的安装文件了,如果pocket   pc已经存在SQLCE,那么运行没有问题。但是当pocket   pc没有SQLCE的时候,我却无能为力,请问怎么一起部署这两个东西到真正的pocketpc中呢?或者分 ...…

查看全部问答>

ADC测交流和测直流区别

编写的STM32程序,用测直流是准确的,但测交流得到的值,与用示波器测的值差得太多,明显不对..请问,测交流有什么注意事项,,与测交流有什么区别,,PS:ST给的demo全是测直流,…

查看全部问答>

关于STM8的破解

                                 想出了一种利用STM8S利用内部唯一ID进行芯片加密的方式,不过要将这96个数据放入EEPROM或者FLASH。不知道STM8S的EE ...…

查看全部问答>

求单片机高手!!!

本人有一单片机P87c58x2F的bin文件,想反成C语言加注解,,,,,.求高手帮助。能者请call:13392707625   李先生 QQ:543206022…

查看全部问答>

对MSP430FR5739开发板的一点计划

FR5739最大的亮点自然是FRAM了,对这个东西是早有耳闻但是一直没有机会接触,正好最近想对自行车和无线小车下手,这板子还带3轴加速计,正好可以检测运动情况,正是我想要的东西呐!同时也可以连接无线模块,能让我控制并同步获取小车信息我知道很多 ...…

查看全部问答>

讯号产生问题帮解

小弟目前想把ic所出来的讯号分成两个讯号要差180度那我目前做的测试过程是讯号经过37325再打入4013最后,再把原本讯号跟4013出来的两个讯号分别做And,最后的两个讯号是有相差180度,可是最后出来的讯号周期被拉长了跟我原本的讯号周期不一样了那不 ...…

查看全部问答>