关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 H! v% a! d" g" |! |
3 h: Q' U4 H: x5 c" ]) q, d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& u0 M: j3 m4 G* k2 S) a3 P/ f# ?
6 M# I  L; v  K
其他程序段。。。。。+ h, L1 T1 s2 x4 X$ ~- U' Y. `

2 m" b( P3 _, u, q  w   free(x_d);
; n4 K3 u! z( t1 C. S+ a9 p+ ?2 f! ~$ R0 z0 t& l) r
使用DSP侧单独调试功能,验证动态申请没有问题,1 n5 W6 C9 K9 J; H  e
0 X5 T/ i5 [( ~# w" N  U
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# W* I! o$ b3 A# o' C9 o' X2 ]7 H

& a2 k( F9 f! K% {: u
6 N% c- x) y4 c' t. A8 k$ C) R
1 P6 J3 ]" Y) F7 f! j7 T  Q: d; f! ?: c
/ M6 R6 ?* A6 \. v

9 L/ O: u% y( F3 J0 f" v3 }. Z2 S' _0 @5 y9 t$ O' }, E( x; n+ R5 {6 R/ a
6 O, S5 j' B  m
6 L7 \" \2 d7 p
! d& Y3 Y2 _: j  `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  \5 A1 g. [1 _% ~0 u: L7 m( uProgram.heap = 0;7 [8 J6 `3 K& Q6 n- v# R& e& h
Program.argSize = 100;  /* minimum size */
& [& g5 H% _' q( ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 `/ @# `7 y2 k% o8 n, x# o, pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 P, }1 \- ~. j% g9 S3 j
var heapMemParams = new HeapMem.Params();
0 q0 P  ^9 I( eheapMemParams.size = 0x4000;2 ^* {! w- B1 s7 x7 _& k
  @8 x2 S; u7 D, n
var Memory = xdc.useModule('xdc.runtime.Memory');$ t0 w1 {! T6 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, m( I. L# t4 @, y; |" X
/ w* q, p  t6 z我大约calloc  每次共计大小为5K*16bits,
! o% o0 [6 `) f% k而默认配置才0x4000、需要改大。$ f  t) }# z/ M% y

$ n/ v- T: m5 ?, r* E3 d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% J+ k) O$ y. x" V3 U. ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ u! a2 ]7 R% z# A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: e# e: `9 M; {+ z  _( L4 e
7 \) T9 U8 I4 a" {) v
是不是需要在DSP.CFG中进行配置' S# I6 X3 F* e- q" x( S
我现在的配置为
2 V8 D4 v% V4 k. Q' A6 s' Y7 O( q: b6 N
/*
2 h# q' ~4 L8 d  F *  ======== Operating System Configuration ========
, E9 F+ r) T. _, }$ U */
# W- Q+ ]9 \0 f7 k- m: Q9 m$ e
5 c/ F8 j7 [  k* [  Z6 ?/* no rts heap */
3 W# @& u- m; x+ P! b+ AProgram.heap = 0;3 T) o9 a: c& D2 O% T
Program.argSize = 100;  /* minimum size */* ?$ G7 F* \* z% C9 u$ d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, b( M7 A  {3 H# ?' ?" n9 r7 C3 A% _3 p1 R
/* create a default heap */! E$ Y4 I" T/ y" s0 X7 v9 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* m: _4 H' F1 F" s6 |
var heapMemParams = new HeapMem.Params();
8 l- M6 w: J* e; D5 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 ~+ `$ ^. \! u0 O" l0 |3 y

/ n) ^9 }" h# Y2 t/ q4 i
var Memory = xdc.useModule('xdc.runtime.Memory');
5 W$ F, m( J9 q. UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. f: n- p' `( J! d& l' n+ f
- M& ?) `4 v, l( [! R$ a
/* configure System module *// r  T  ]/ f8 W, Z: y) Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');& H+ B% d6 m3 x! ^7 x: Y, \
SysMin.bufSize = 0x1000;
- `& L+ H8 d5 N: S+ HSysMin.flushAtExit = false;
$ o4 h8 V  J! w9 o6 B" f+ U
3 V% c" Y; l* J* S% a; Fvar System = xdc.useModule('xdc.runtime.System');
, ?* h" b; c" G. y9 s4 S/ L- Y4 z4 oSystem.SupportProxy = SysMin;
& c, W$ P3 Q8 U% T
9 I3 }7 i3 o3 }+ H. l" n/* configure SysBios to use the lower half of Timer 1 */
: e. t- s- s+ ?9 Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ g, k6 ]4 j/ h! o- m0 @8 Q& e! k/ N6 y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! @: L# N3 p% v5 [
Timer.timerSettings[1].master = true;) ~( C9 \" I' L8 x5 A+ f" p( U
Timer.defaultHalf = Timer.Half_LOWER;9 f  f/ l! S* T6 g
Clock.timerId = 1;. U8 z' {2 ]! p' L* }/ D% r

- m5 \+ B2 ^- S! j7 ?  t- R; |- @. ]8 v( T5 ^3 D% ]
/*( Y7 G) s: H) h. o& z
*  ======== Miscellaneous Configuration ========, w6 u; ~) [, h9 O
*/
4 i+ H  [" P& B! J, P0 D# r9 q/ M6 z/ e2 |: d
/* set default diags mask */, N5 f2 S3 m) X3 X6 W; R" a
var Diags = xdc.useModule('xdc.runtime.Diags');6 Z. i/ p- k5 }% k7 D) l! J0 o8 u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ m0 Y3 n# k& |/ r  J7 H* v3 e2 {" {/ `) t9 |" m' P+ x! e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* R; K' x  ~" X* w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* I- e, @" S4 c$ Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- L7 F  Y( L' Z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% U6 I/ x, j  I" D7 T! \1 s- i
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  |3 t& H. g; ^- ]0 V9 W4 x1 ?6 k# E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 [' Y# V. |$ T9 i2 ?  kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 c9 `& j6 f5 L' {. j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 F% \9 V% ?1 F( L& p/ K, xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 A& F! d7 R- F% m
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 `" L5 n; c$ z0 w% m( n) cDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% I0 ^. E! q- zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 g, n9 B$ P7 m4 uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- K+ v! |& v4 L9 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  l2 ]  ~% S$ h: G$ o6 ?
" E; T' A# I8 t" D$ `% E, n( J/* override diags mask for selected modules */) f% R5 z0 R# F$ [3 A* D
xdc.useModule('xdc.runtime.Main');
$ I$ t5 {) a$ i( T  \; ~: L7 WDiags.setMaskMeta(% i, @, y! h! A" B/ V' S5 D4 n
    "xdc.runtime.Main",1 ~8 R- ~+ e) a7 `! Q/ h( N9 B* I, i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! d, A8 X1 `' H6 F9 L
    Diags.RUNTIME_ON' J5 h( @7 f  t9 O$ S1 r2 @0 u' L) H0 u
);
+ X2 f" c0 @/ Q0 f% E) a9 b0 r, e: r% p* k5 G$ x3 b6 j
var Registry = xdc.useModule('xdc.runtime.Registry');% o9 k! F$ D  `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ z; G/ c. y) V1 yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 J0 `- H5 y8 H! k& _# y$ e! q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 p$ E( }" h+ y5 B
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 F) ^/ J: q7 E" k! j* Y0 H; F! \- A- v1 r1 |9 H1 L
/* create a logger instance */, c5 m# q7 c* t" d) F! `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 l/ q! M  o( U2 _/ x
var loggerBufP = new LoggerBuf.Params();
1 }. q# T: K9 o, I4 o5 PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( o. W8 F' K. j' c0 ~4 n7 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 g' g3 K* @0 v0 K/ k8 x0 y; f
: P0 m/ T, W6 V6 k# L; S
var appLogger = LoggerBuf.create(loggerBufP);8 `% r+ O) X, s% }; G( C; b6 g
appLogger.instance.name = "AppLog_Core1";+ s9 z9 E! Q6 ~/ P
Defaults.common$.logger = appLogger;" n, P% O5 V/ R  A, ?! q2 i
Memory.defaultHeapSize = 0x8192;   
* \, @9 C9 C. MIdle.idleFxns[0] = "&LEDStatus";  k5 M$ B2 w2 Q4 \. e
Cache.initSize.l2Size = Cache.L2Size_32K;
) G- t$ g" z; i$ a1 ?" I/ y8 p
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-27 12:51 , Processed in 0.040907 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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