关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7054|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 T6 J) l* D! S3 |8 \+ E- x

* J  e! z' |7 h: d- g5 |0 X4 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) w' p$ e( @) _! x% @

: g) |1 e( F/ h  W- X, k其他程序段。。。。。
0 b7 P& @8 t+ w: J 6 S) z. v! ^( b, f/ C' o: N# D
   free(x_d);+ S5 Q7 s. I1 u  Z$ ?2 s

8 f& r" h& \2 A) {5 ^$ x+ K0 x" o使用DSP侧单独调试功能,验证动态申请没有问题,
+ y1 Y# _% v7 `1 n6 i$ m7 _/ e' m' Z" f% `3 j3 \+ f" f1 o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 _" S- G! n  X. X" \' p
/ {! e$ U. j0 S" V7 K* \

$ ]5 u- f, q% g' G% z- G# U$ y- r7 `3 l5 T4 x' V$ J

9 |9 a8 g6 [: m& {, u1 R8 E/ J  p6 ^' C

% j& k4 {: y* x# `% ?7 t8 A
: z* |+ G% x. a; `" |  O" A$ L' V  }! W# g# [4 g, s% U
7 s% `2 ?  {) q, J" J
3 \$ E6 e+ S* T5 V* W2 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* k) T* v# D/ p, A: H7 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* b' z& l4 M% _6 R5 e9 o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# [  S. ~* h9 R8 X5 L
, p" p  l8 O2 D7 \$ V% ]. D
是不是需要在DSP.CFG中进行配置) ^( }' t* j" |6 C0 Q
我现在的配置为" G% I% m+ ]- K* m

, {' P/ t' E1 h& y4 M. i  |/*
. l* k7 ^6 w0 D# I. A1 x *  ======== Operating System Configuration ========
! _2 i' c3 W9 G: m! | */
1 D2 |. b, E/ ^) q" g  K4 p: m
1 G6 p6 V9 P5 q7 v) [0 v- J/* no rts heap */
* w5 S+ m* _3 c7 C2 z3 K/ U8 k: KProgram.heap = 0;  `9 m! N! b4 N6 u% Z. A$ x8 w
Program.argSize = 100;  /* minimum size */
' F4 W& U# {8 `- r# b5 sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. W) t1 t4 `; a- Z3 C4 `1 R
- U2 r! r3 C$ a* J. ~/* create a default heap */: h% D' W) }1 O3 j9 Q( I+ G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* s3 d5 N3 [7 B# h* |) m) u0 f
var heapMemParams = new HeapMem.Params();- n% }3 ?: ]# x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, G/ {  w" g3 b. a1 X. U
* c! x* z& S  \. ?9 ]& U) {/ B
var Memory = xdc.useModule('xdc.runtime.Memory');
# f& q' O" w- ~; V7 h  D- B7 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' e2 L( K8 J- ]1 c
# @3 E3 c0 i# m3 Z/ y
/* configure System module */' I" Y9 H" K, S1 l
var SysMin = xdc.useModule('xdc.runtime.SysMin');' o2 F2 S% k1 A1 t8 v6 C+ [
SysMin.bufSize = 0x1000;
5 J+ p+ I( t, f" j3 e, I" c. zSysMin.flushAtExit = false;1 `1 {. z, O( J' v, ?

3 K; M3 G. g+ Q* Fvar System = xdc.useModule('xdc.runtime.System');
3 \9 w8 N! {! VSystem.SupportProxy = SysMin;8 Z2 V- g4 s) k8 K" X! Z

3 G6 p9 g2 |6 I4 u( J( y/* configure SysBios to use the lower half of Timer 1 */
: X8 u4 b0 f1 bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' i1 r9 n5 p! y. a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 `2 p' e* N3 yTimer.timerSettings[1].master = true;, ~+ r0 ?$ C0 p% g
Timer.defaultHalf = Timer.Half_LOWER;
8 L* f, c; Z" z& }* T1 BClock.timerId = 1;
& j7 W/ ]$ x' s  C- U' Y6 [$ u- _! y* U# M, \4 L. W  A

# c* r! [$ ]- _' _  B) P) M/*
- ~/ J) `/ f0 g' U* b *  ======== Miscellaneous Configuration ========7 x9 T! P% z7 m$ Q3 h
*/5 s8 E4 ~3 Q/ k9 U% M* w
: a' d8 Y0 H; r& I+ G/ I/ i" f
/* set default diags mask */. C; l( y" F9 e8 H* H: ~- A$ j
var Diags = xdc.useModule('xdc.runtime.Diags');
" z8 X" q$ R( H2 {var Defaults = xdc.useModule('xdc.runtime.Defaults');. r/ j* I; l3 D% t8 Z

$ @; F% w4 s" a$ K& [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- B% `" z8 k% Q/ p# J& Z& ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 e2 Q& X) R! k5 d5 J- hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; H; e7 F# N/ X9 t' v. k- R; V5 b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 Y% V$ b; j" ^9 s4 t/ o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ w. G2 R6 x  i, HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! J1 a, V6 |/ N% V: K; j( F6 nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& e. v% H: J0 _' kDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ k2 @# ?% c; Y% p2 q  q0 jDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# b" w, r. n$ e, X. E. @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. y& H+ w0 `  G. g& k+ O9 T- ODefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 j) @0 J, ^% U, ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 |" P7 K1 L" e& A# x3 v1 J4 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& y) V  H9 T4 P9 K5 Q) ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* ]6 e: B. ]# W' ^# Z; M
* s. x2 P8 C: X3 z; K6 t# v+ H
/* override diags mask for selected modules */
$ b9 _: R5 X9 j$ o% V2 ixdc.useModule('xdc.runtime.Main');
+ a2 c, B- C% g" Y7 f- {Diags.setMaskMeta(4 u2 ]+ V* y! I3 Z
    "xdc.runtime.Main",. m! q  }) H: i" G+ \, d+ k0 Z4 C
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, j* J8 r* ~) }8 Y" F    Diags.RUNTIME_ON# s2 r$ e7 \$ e8 Y& Q, F& [
);) [4 m, Q, p7 m! j4 }
5 y4 T6 J" U! V" X" S$ ?' p7 N
var Registry = xdc.useModule('xdc.runtime.Registry');0 [" y2 f/ a+ x  }: K* o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! a9 M; o0 l" i! B1 z) {% JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# y" r8 D* O' y& n  l5 G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 \$ h- ~8 i2 Q# u5 nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 }2 B/ u  @. S2 P4 h8 i* u
4 ~5 M' }# g) c/* create a logger instance */
! {' n7 H+ c4 I' v* d% ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) K6 G9 U0 h0 |* D# Q
var loggerBufP = new LoggerBuf.Params();7 i+ n. {! C. T6 ?$ d2 |" |" m' q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* q5 |2 P: ^! W' o9 |8 Q7 L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; m: N& k1 {1 w; ?

( h! b- [  c, Z1 l: Uvar appLogger = LoggerBuf.create(loggerBufP);8 d1 j- e5 q$ p0 r& G
appLogger.instance.name = "AppLog_Core1";: d" K+ `! |% {9 f% k2 D
Defaults.common$.logger = appLogger;- A4 ?8 K, h1 l% w8 K2 P
Memory.defaultHeapSize = 0x8192;    ; @0 J8 X' Q& H+ \( t3 q
Idle.idleFxns[0] = "&LEDStatus";+ L" S/ a1 E3 u4 Y3 n
Cache.initSize.l2Size = Cache.L2Size_32K;
* u* }- \9 E4 T% q) Y* D7 l" x2 b" R- U  s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 n- g, I; n) ~" ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& a7 l  _# X, c9 O# Kvar heapMemParams = new HeapMem.Params();
. ~6 s. e' R, o" f$ DheapMemParams.size = 0x4000;
  H, [, G8 r; [8 w# Z
3 `! @3 G6 W7 f- gvar Memory = xdc.useModule('xdc.runtime.Memory');# `7 O# N. ^# q" ]& X% {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* G  k9 r% y7 M2 @% a, B% i
0 m6 j: k8 c6 ?) `1 A5 J我大约calloc  每次共计大小为5K*16bits,
$ }: o! X2 C! T0 N9 w& {而默认配置才0x4000、需要改大。
1 ~( ^0 h; v  p+ R8 o5 u$ q
3 x' {, M  ]; p! h$ X: b0 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; v! c9 n1 W0 j9 e+ \* L' I. f4 _Program.heap = 0;( B& {$ h2 Z6 z/ M+ _7 l
Program.argSize = 100;  /* minimum size */& s1 V4 R3 v9 j( W- q% M+ _0 @9 ^  ?7 c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-12 02:13 , Processed in 0.061232 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表