在Keil中指定某个函数或变量存放的地址

在我们开发过程中,有时候会有这样一个需求:希望能够指定某个函数或变量存放的地址。

也许你看过一些文章,里面介绍了一大堆内容,甚至于还会介绍分散加载文件的配置。但是绝大多数情况下,为了实现这么一个简单的功能,还要学太多东西,是不是一下就懵了?

那么,请继续往下看吧。这篇文章会教你一种非常简单的方法,一看就会。

只需要使用__attribute__((section(".ARM.__at_addre[......]

继续阅读

有关const的一个误区

在学习C语言时,无数本教材都告诉我们:用const 类型 标志符; 这种方式是定义一个常量,也就意味着不可以修改。但真的只是这样吗?例如:

int main () {
    const int var = 0x1;
    var = 2;

    printf("%d\n", var);
    return 0;
}

你可能会说: var是不可修改的。从表面上看,似乎是这样,现在来编译一下[……]

继续阅读

RTOS系统延时与普通软延时的特点与区别

我们知道,在RTOS中会提供若干延时函数的API。对于没有仔细了解过RTOS的同学而言,可能会产生这样疑惑:这些API与普通自写的延时函数相比究竟有何优势呢?为什么要额外提供这些API?

在这篇文章中,我们来分析下这些API接口的工作原理、特点以及其相比自写的延时函数,究竟有什么优缺点,我们该如何选择。

普通延时方式

在没有使用RTOS之前,我们可能通过以下方式实现延时或定时。

指令软延时

在比较[……]

继续阅读

uCOS/FreeRTOS任务创建的两种模式

在我们使用uCOS/FreeRTOS编写代码时,首先要面临的一个问题是怎样创建任务并启动整个系统。一般来说,我们会有两种不同的方式。这两种方式不仅适用于uCOS/FreeRTOS,同时也适用于其它RTOS。

创建任务的两种方式

这两种方式各有优缺点。如果用一幅图来表示的话,见下方。

下面将分别说明这两种方式的具体应用方法。

方式一:先创建启动任务,启动任务初始化软硬件并创建其它任务

这种方式是这[……]

继续阅读