...小于 1 分钟
关于我
嵌入式工程师
关于本站
这里有关于站点的详细介绍
小白教程
从零搭建博客网站
学习笔记
我的学习笔记
agile 全家桶
轻量级软件包
RT-Thread
小而美的物联网操作系统
博客模板
vuepress-theme-hope
...小于 1 分钟
...小于 1 分钟
...小于 1 分钟
RT-Thread 4.1.0
SD 驱动框架
SD 初始化失败移除 blk_dev
时存在双向链表 next
和 prev
都为 NULL
的情况,造成死循环。
修改 rt_mmcsd_blk_remove
:
void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card)
{
rt_list_t *l, *n;
struct mmcsd_blk_device *blk_dev;
+ if(card == RT_NULL)
+ {
+ LOG_E("card is null!");
+ return;
+ }
+
+ if(rt_list_isempty(&card->blk_devices))
+ {
+ LOG_E("card blk_devices is empty!");
+ return;
+ }
+
+ if ((&card->blk_devices)->next == RT_NULL)
+ {
+ LOG_E("card blk_devices is null!");
+ return;
+ }
for (l = (&card->blk_devices)->next, n = l->next; l != &card->blk_devices; l = n, n=n->next)
{
blk_dev = (struct mmcsd_blk_device *)rt_list_entry(l, struct mmcsd_blk_device, list);
if (blk_dev->card == card)
{
/* unmount file system */
const char * mounted_path = dfs_filesystem_get_mounted_path(&(blk_dev->dev));
if (mounted_path)
{
dfs_unmount(mounted_path);
LOG_D("unmount file system %s for device %s.\r\n", mounted_path, blk_dev->dev.parent.name);
}
rt_sem_delete(blk_dev->part.lock);
rt_device_unregister(&blk_dev->dev);
rt_list_remove(&blk_dev->list);
rt_free(blk_dev);
}
}
}
...大约 1 分钟
...大约 6 分钟
uint32 int32 -1 相等判断
#define RT_WAITING_FOREVER -1
int main(int argc, char *argv[]) {
uint32_t timeout = 0;
timeout = -1;
if (timeout == RT_WAITING_FOREVER) {
printf("==\r\n");
} else {
printf("!=\r\n");
}
return 0;
}
...小于 1 分钟
Nano 实践
官方文档数据
资源占用小: 对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占用 4K 左右。
Nano 资源占用情况举例:在运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸。以下是基于 Cortex M3 的 MDK 工程编译结果(优化等级 3)。
Total RO Size (Code + RO Data) 4000 ( 3.91kB)
Total RW Size (RW Data + ZI Data) 1168 ( 1.14kB)
Total ROM Size (Code + RO Data + RW Data) 4092 ( 4.00kB)
...大约 4 分钟
参考链接
C语言中的柔性数组 C语言结构体中char[0]和char[1]的用法
实现机制
在结构体最后加 char[0]
或 char[1]
的用法是GNU C的扩展,在ISO/IEC 9899-1999里面,这么写是非法的。
这种用法在C99中叫做 柔性数组。柔性数组成员前面必须至少有一个其它类型成员。包含柔性数组成员的结构要用malloc进行动态内存分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
...大约 3 分钟
前言
相关信息
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
警告
代码编辑器的提示不可全信,要相信运行结果,如 sizeof()
参考链接
...大约 4 分钟