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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 m! ~  ]2 E9 @1 k7 [' c# o  F8 O. u7 [; v" V* F% Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  d3 |; w. b0 g! Y, c
+ T$ d. Q4 j6 X
其他程序段。。。。。
, z3 i5 P5 M' w 6 q4 `5 z: `) A% L. @2 I
   free(x_d);
+ {- x, i; F! S
' \2 h& D. F  ^2 [$ a. E使用DSP侧单独调试功能,验证动态申请没有问题,
- v" V8 y, ?  _6 N
5 R; N* R# Y' J: d  c6 q( u% @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 K4 H  u6 {5 W4 a: g( [

) C( q( [* u# F: h: Y
" A% U2 U- x+ r2 J+ Z* C* m  C  w0 |6 A9 @; i+ Y
. {5 p6 z$ ~( b0 h

! v: p1 Y3 Y0 |- x$ c1 u7 M1 s; H1 t/ }- L& K

0 t: \( j, o. ]. [, L1 J/ _) l. Z2 _" H# a' H6 ^5 w

$ i# v% k: l* E1 t
1 O6 }* R7 W! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 X) d/ S' D4 q' ]: z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# h% t0 u% x4 |, L9 {2 O3 ^/ l
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 ~  D4 K0 X4 u5 ^: P- V
' `6 k& O1 }2 b$ o: T' Y5 N( s' m
是不是需要在DSP.CFG中进行配置
; ], ]* n/ Y# I9 k8 G8 Y我现在的配置为8 E$ `# n& _1 M

8 I9 R; M) [  R/*$ z& t) g1 y5 b2 g9 G- _" e; P
*  ======== Operating System Configuration ========1 Q" G! Z) u7 Y3 {3 ?
*/, v- \, A  R7 Y$ c
2 K4 j2 H5 R' ^7 Q6 I! o
/* no rts heap */2 |0 V) {8 U* o9 q" P
Program.heap = 0;7 c5 I- o" n3 K3 B5 b" d
Program.argSize = 100;  /* minimum size */# ?0 I. U, E4 r: _9 U% i# V* R9 |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* P6 m6 I7 c3 u: ?% m' a9 [% a7 M, F! `7 s5 F3 u
/* create a default heap */
" }/ \# Y% R/ q: K8 i( F2 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! X1 r7 R- d: c, h% ]var heapMemParams = new HeapMem.Params();. f8 t. _2 x- ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ T- o' B* [5 A; [3 J! A* f# h% v% ?) R; j7 Q/ P8 X
var Memory = xdc.useModule('xdc.runtime.Memory');
6 i5 C* L( v$ J3 c7 H2 r8 {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ h/ n9 u, K  f: l' k4 |' `9 v1 @6 D$ ^4 F
/* configure System module */1 D( j, o7 [1 C: o% Z/ _
var SysMin = xdc.useModule('xdc.runtime.SysMin');& x( V( k+ k  ]# H
SysMin.bufSize = 0x1000;
/ @8 p# z1 w  X: pSysMin.flushAtExit = false;& I& b6 S4 t% `

7 n- a8 \, ~$ B: ]$ l/ yvar System = xdc.useModule('xdc.runtime.System');
; f; j6 Z$ F" U/ o% `System.SupportProxy = SysMin;1 C6 @  Q7 t, w( c* Q

3 c4 q* F* H" n, v/* configure SysBios to use the lower half of Timer 1 */
. O1 a' e1 l9 m0 @/ ]9 {: s/ T) U5 qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 s- z& O& C. P2 P$ M/ bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 l0 E$ D9 E+ n5 _8 N7 P: G- @
Timer.timerSettings[1].master = true;% f8 ~" E: [8 b- g& }. ]# S2 t
Timer.defaultHalf = Timer.Half_LOWER;. \3 Z8 F$ U: q' ^& {+ A) j2 }
Clock.timerId = 1;2 s  K( I* ?9 t0 [
* e: b' r; q9 ~

& f7 K- B1 O: n3 A& F, H4 i/*! m. g# R5 o; S! ?  P: d& V
*  ======== Miscellaneous Configuration ========* ^+ @, ]' ]) w  d  x& Q/ r
*/
  j  ?8 B( `1 ?# x; n& u+ y
4 |7 \0 ?. W6 [  a  M/* set default diags mask */
, f" u# E# n7 g( c' G9 Q) _var Diags = xdc.useModule('xdc.runtime.Diags');, [7 \) k2 s3 w2 F
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 A! X- e! }# y! r4 r' y" f
( ^% K1 F  O" P4 g  `3 O' ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, ^1 ?8 P, R8 NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" v6 ^5 [6 |  K- {5 WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 ]7 J4 Q8 E; A0 p$ i- VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! @( t! q0 D. w8 E" gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 N3 [6 b. T1 t) y  G; ^+ r6 g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 z* @  a# J0 e: u* B% fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. _# e) M+ I  s0 M' ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% Z3 C6 v+ K, O5 p% x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 x$ u2 q. b* m2 j7 x
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 M/ h! L- U( w! N. e; A
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ }) l- h* P: E9 a5 _- H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% w& B: F* G8 V+ V6 X: ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 z, d% h2 K) l% E8 y* [* U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. B+ A4 H- v& H0 p# ^; W

) `6 r) _% J( A/* override diags mask for selected modules */
; R- a( |& E0 |; l6 I" mxdc.useModule('xdc.runtime.Main');0 Z, b! x! L. U, u' j0 X$ j! q
Diags.setMaskMeta(
4 q  B6 M2 @) ]  _8 b* L+ Q! d    "xdc.runtime.Main",
& @, V' v' j, Y' X5 E0 L    Diags.ENTRY | Diags.EXIT | Diags.INFO,: `2 ?3 o! N4 D- x1 r6 V
    Diags.RUNTIME_ON
3 e6 D; a/ X  i7 Y* @);4 B& ?3 `; z. u

) O5 n& q/ B, n6 Vvar Registry = xdc.useModule('xdc.runtime.Registry');
: _- |9 N- e% i8 c& Q) yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' J; ^8 h. q. K; ]1 }% w3 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# {, m$ G8 V! g3 J. _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ B* u( l( g8 l+ h2 l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( w% m3 r- w2 _/ k$ d
3 f! ^4 w% o+ m2 }! v+ K, T/* create a logger instance */& q) K- D: y! a! d2 K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 T8 u$ N0 L  E! w# }, Y+ U7 G
var loggerBufP = new LoggerBuf.Params();: u$ D) r7 H  `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. s" f4 o6 j6 X1 L2 BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 C+ r5 b8 t4 N: b7 P! Y4 T
- B* c" ^0 R0 D- A! k- B* S3 Uvar appLogger = LoggerBuf.create(loggerBufP);
# A; g8 s& o+ V/ [' v5 YappLogger.instance.name = "AppLog_Core1";
: t0 W& u3 v, G' Q, r( nDefaults.common$.logger = appLogger;5 V8 ~& w& A3 _) c8 W( A
Memory.defaultHeapSize = 0x8192;    5 u8 W0 P) g2 i- F2 {3 ~
Idle.idleFxns[0] = "&LEDStatus";0 G1 X+ ]' G8 B3 u
Cache.initSize.l2Size = Cache.L2Size_32K;# V/ q8 o0 C1 w( S8 R( b, K

! U) P  Y) _8 @; s, m
回复 支持 反对

使用道具 举报

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 */
/ f( @& L- [; v# k( |$ fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 B! v; X7 [( o9 Y% lvar heapMemParams = new HeapMem.Params();# T& M6 _, w, n- p
heapMemParams.size = 0x4000;* T( |; \% C& b9 `- D
. u; L7 D6 ^7 [; W
var Memory = xdc.useModule('xdc.runtime.Memory');$ G! F. F' `+ f9 x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 K7 r0 C- K1 Y5 @
. b- U# |$ Q7 X8 K( }' P' p
我大约calloc  每次共计大小为5K*16bits,9 J8 X1 `; T, I' J- i1 a' {5 H2 a" Y
而默认配置才0x4000、需要改大。
' k% ?6 h, E, Y* }2 u7 A4 X; `, G# b6 m, S- x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. N6 P% f4 Q' g
Program.heap = 0;6 l8 A# y4 b9 B5 |! C0 |
Program.argSize = 100;  /* minimum size */
  Z& ~( B( U' L+ N. eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 18:11 , Processed in 0.043073 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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