小编Wed*_*shi的帖子

SIM800L空白短信问题

我正在使用带有Texas Instrument Launchpad 的SIM800L模块,带有MSP430G2553微控制器,不使用SIM800L的外部库.

问题陈述: 发送简单文本消息(带文本模式的SMS),在手机上作为空白消息接收.

SIM详情:

1. SIM 1:地点:印度.运营商:AirTel,4G兼容SIM卡.
2. SIM 2:地点:印度.运营商:Tata Docomo,3G兼容SIM卡.

我所知道的:

  • 固件中的UART驱动程序经过测试和工作,非轮询,中断驱动.
  • 没有添加阻塞时间延迟作为AT命令的读取响应的替代.<CR><LF>OK<CR><LF>对于大多数命令,我读取响应并且仅在收到肯定确认时继续.
  • 我已经通过示波器确认了在Tx-Rx引脚上发送和接收的数据位.一切似乎都符合预期,包括电压等级.

我读过的内容:

  • 通过非官方消息来源(当然是论坛)的一些猜测认为SIM800L只有2G兼容.

  • (维基百科的浅读)我已阅读GSM 3.38GSM 3.40,以及数据编码方案部分,了解如何在适合/相关的AT命令(AT + CSMP)中处理文本编码.

  • 各种论坛,包括用于非常普遍使用SIM800L模块的arduino的论坛.

Stackoverflow上的相关文章:

第一个答案似乎对他有用,但对我来说不起作用.

我试过了什么:

  • 我使用了与Docklight串行终端实例相同的模块.从我的手机收到从Docklight发送的短信,并按预期显示,而不是空白.

  • 在第0天,在将模块与Launchpad硬件集成之前,我已经使用SIM800L的预期响应的精确副本测试了整个固件状态机.

  • 除了一些初始配置之外,两张SIM卡的结果都是相同的,但是在我发起任何与SMS相关的任务之前,我在其中加载了一组典型的配置.

我使用的典型值是:

  • 回声
  • CSMP:17,167,0,0(我已经尝试过17,167,0,0,但没有运气).SIM 1的默认值为17,11,0,246,SIM 2的默认值为17,255,0,0.
  • CSCS:"IRA"

串口失败组合:(SIM 1和SIM 2)

  • CSMP:17,11,0,246 | CSCS:"IRA" - 发送空白短信
  • CSMP:17,11,0,246 | CSCS:"GSM" - 发送空白短信
  • CSMP:17,11,0,246 | CSCS:"HEX" - 发送空白短信

串口成功组合:(SIM 1和SIM 2) …

embedded sms character-encoding at-command sim800

8
推荐指数
1
解决办法
1729
查看次数

静态函数和变量在共享库中导出

到目前为止,我假设 C 中具有静态链接的对象(即静态函数和静态变量)不会与其他编译单元(即.c文件)中的其他对象(静态或外部链接)发生冲突,因此我使用了“short”内部辅助函数的名称,而不是用库名称作为所有内容的前缀。最近,我的库的一个用户由于与另一个共享库的导出函数发生名称冲突而发生崩溃。经过调查发现,我的几个静态函数是共享库符号表的一部分。由于它发生在几个 GCC 主要版本中,我认为我遗漏了一些东西(这样的主要错误会被注意到并修复)。

我设法将其简化为以下最小示例:

#include <stdbool.h>
#include <stdlib.h>

bool ext_func_a(void *param_a, char const *param_b, void *param_c);
bool ext_func_b(void *param_a);

static bool bool_a, bool_b;

static void parse_bool_var(char *doc, char const *var_name, bool *var)
{
    char *var_obj = NULL;

    if (!ext_func_a(doc, var_name, &var_obj)) {
       return;
    }
    *var = ext_func_b(var_obj);
}

static void parse_config(void)
{
    char *root_obj = getenv("FOO");
    parse_bool_var(root_obj, "bool_a", &bool_a);
    parse_bool_var(root_obj, "bool_b", &bool_b);
}

void libexample_init(void)
{
    parse_config();
}
Run Code Online (Sandbox Code Playgroud)

静态变量bool_a和静态函数parse_bool_var在目标文件和共享库的符号表中都是可见的:

$ gcc -Wall …
Run Code Online (Sandbox Code Playgroud)

c static shared-libraries linkage

5
推荐指数
1
解决办法
1653
查看次数

BlueZ D-Bus C,应用 BLE

我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信。我的应用程序将用 C 语言编写,并打算在 Linux 下工作。

是否有通过 C 中的 D-Bus 使用 BlueZ 的教程或示例?此应用程序的目的是从 BLE 中的文件发送数据。

你能帮我吗?

c linux bluetooth-lowenergy bluez

4
推荐指数
1
解决办法
4739
查看次数

为什么插入列表需要指向指针的指针

教科书以这种方式描述插入算法,我的问题是,它不能通过第二个函数来完成,如下所示,它不包括指向指针的指针,而是使用*l和l.

void insert (list **l, int d)
{
    list *p; 

    p = malloc(sizeof(list)); 
    p.data = x;
    p.next = *l; 
    *l = p;
}


void insert1 (list *l, int d){
    list *p;
    p = malloc(sizeof(list));
    p.data = x;
    p.next = l;
    l = p; 
}
Run Code Online (Sandbox Code Playgroud)

c pointers

4
推荐指数
1
解决办法
71
查看次数

增量和逻辑运算符优先级

在下面显示的程序中,应首先评估前缀,因为它具有更高的优先级,但是答案是-2, 2, 0, 1并且在书中解释"因为||的LHS是真的,RHS未被评估".
为什么会这样?应首先执行所有增量,然后由于优先级检查逻辑.

#include<stdio.h>

int main()
{
    int i=-3, j=2, k=0, m;
    m = ++i || ++j && ++k;
    printf("%d, %d, %d, %d\n", i, j, k, m);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pre-increment

2
推荐指数
1
解决办法
388
查看次数

c中函数调用的冲突类型警告

我正在通过交流代码突然出现意外疑问.下面的代码向我发出警告:conflicting types for 'display',但是当我删除void时它工作正常.
有人可以解释一下我究竟是什么错误吗?提前致谢.

#include<stdio.h>

main(){
    display();
}
void display()
{
    printf("hello world");
}
Run Code Online (Sandbox Code Playgroud)

c function

2
推荐指数
1
解决办法
120
查看次数

将可变数量的参数传递给C函数

我正在探索在C中使用变量参数,使用GNU(在Code :: Blocks中).当我执行以下代码时:

#include <stdio.h>
#include <stdarg.h>

void VarargsTest(int n_args, ...)
{
    int i, arg;
    va_list ap;

    fprintf(stderr, "N_args is %d\n", n_args);
    va_start(ap, n_args);
    for(i= 0; i < n_args; i++)
        {
        arg= va_arg(ap, int);
        fprintf(stderr, "arg %d is %d\n", i, arg);
        }
    va_end(ap);
}

int main()
{
    VarargsTest(1,2,3,4,5,6,5,4,3,2,1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

N_args is 1
arg 0 is 2
Run Code Online (Sandbox Code Playgroud)

即,没有正确地向VarargsTest函数报告参数(11)的数量,甚至它所看到的唯一参数也是不正确的.有任何想法吗?

c variables arguments

1
推荐指数
1
解决办法
79
查看次数

交换函数返回不在我的数组中的数字

我正在使用C中的一个小冒泡排序程序.我正在使用交换函数和指针来完成我的任务,我的程序运行正常.但是,我有一个问题.我的程序返回0(不在数组中)并且不返回9.我很困惑.

我的阵列是: int values[] = {7, 3, 9, 4, 6, 1, 2, 8, 5};

我的两个职能是:

void sort(){
    int i;
    int j;
    for(i = 0; i < (sizeof(values)/sizeof(values[0])); i++)
    {
        for(j = 0; j < (sizeof(values)/sizeof(values[0])); j++)
        {
            if(values[j] > values[j + 1]){
                swap(&values[j], &values[j + 1]);
            }
        }
    }
}// end sort

void swap(int* i, int* j){
    int x = *i;
    *i = *j;
    *j = x;
}//end swap
Run Code Online (Sandbox Code Playgroud)

最后,在运行我的程序后,我得到:

Before:
7 3 9 4 6 1 2 8 5 …
Run Code Online (Sandbox Code Playgroud)

c arrays swap pointers

1
推荐指数
1
解决办法
172
查看次数

直接在函数中使用结构体是否比在C中的参数中传递它们使用更多的资源?

这是我的问题.

有没有一种在嵌入式c程序中使用全局上下文结构的好方法?

我的意思是在函数参数中传递它们还是直接使用函数内部的全局引用更好?或者没有差异?

例:

Context_t myContext; // is a structure with a lot of members

void function1(Context_t *ctx)
{
  ctx->x = 1;
}

or

void function2(void)
{
   myContext.x = 1;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c embedded gcc

1
推荐指数
1
解决办法
122
查看次数

三个参数功能模板令人困惑的例子

#include <iostream>

// maximum of two values of any type:
template<typename T>
T max (T a, T b)
{
    std::cout << "max<T>() \n";
    return b < a ? a : b;
}

// maximum of three values of any type:
template<typename T>
T max (T a, T b, T c)
{
    return max (max(a,b), c); // uses the template version even for ints
} //because the following declaration comes
// too late:

// maximum of two int values:
int max …
Run Code Online (Sandbox Code Playgroud)

c++ stl

1
推荐指数
1
解决办法
99
查看次数