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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 o% K! A$ F/ c4 k5 i) t: l4 X! t1 ?! \( Z' U# e
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 B, }2 d- J! m. J' t3 T2 o- j  ~" z$ H1 A( u- [: s0 \
其他程序段。。。。。
9 Y. N& I: O+ H7 v
. R/ V5 n, w, E" ?   free(x_d);
4 ]6 a# Z. Y8 X1 R: B( K( n
/ a6 k, Q3 Q& m3 Q使用DSP侧单独调试功能,验证动态申请没有问题,; r+ |- @. j! }+ k' @% ]

$ B4 n7 c+ k/ c5 K5 c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% S5 I0 m' e; A/ C. w# V: p' C' g! x

( B6 c0 t1 C4 L0 Z0 W( R' A* A, k' w" v* c
  j8 R- G# C4 K3 @- x/ i2 ^3 y. j
! D  L0 S( Y$ n! x+ U
7 `8 w- ]% W/ s; _3 @8 a
+ }, ^( M6 }% q# Y$ w, X: h, N* S

7 M; Z. j5 c0 |$ G$ Q1 u7 l! k4 @2 D3 \# k! k& T, a
9 S) V! H8 |; Y7 p: j

5 g# ^' p7 L' C0 J- b( M( @; v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& }4 V: k5 s7 v  z* f- o
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- O) U$ O+ B' n* @" {7 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* M7 ]9 H3 @7 c8 i( r' k6 ^  h5 w

& z5 B$ d& I4 q- k0 X( Z& C- p. b是不是需要在DSP.CFG中进行配置1 N  h0 Q* P( |* K' x
我现在的配置为+ a; I  U7 X3 X8 X6 A
5 K! w% X) o; l3 n9 l2 o% ]& r
/*
! W, c" p5 u: Y. p *  ======== Operating System Configuration ========
1 {. Q( F6 @; U) }: z. x */
  S2 i. ], _9 p
2 k$ O2 X4 L( j8 r4 O( Y/* no rts heap */5 S8 Y; s2 Q) _4 }& N
Program.heap = 0;  ^5 A4 ^3 G* `" |1 m
Program.argSize = 100;  /* minimum size */
  j1 C& f2 R* ^/ EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, }/ ^) H2 q- G+ |) T

# C7 L$ U! M0 m. a; t/* create a default heap */- K* B/ v6 z5 W& C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- h4 D3 G9 o9 A# Bvar heapMemParams = new HeapMem.Params();
; `4 g$ r8 \) WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" l* B3 [; @0 M( `3 }% T

- V+ u2 R" O5 z. y. l; U
var Memory = xdc.useModule('xdc.runtime.Memory');: V6 z! w) f+ q0 R+ r- K4 h* y2 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. z; M3 a% q( P9 Y( y) c

% l4 V4 d. m* h0 {/ M/* configure System module */& a( u: v& C0 Q6 U" {& K; C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* N4 X# _: B/ w" \6 R( \& ]1 X! b( u% ?SysMin.bufSize = 0x1000;
3 \+ ~7 b7 t* q) @SysMin.flushAtExit = false;8 ?+ a  c7 I: C

; B8 a( E+ {2 U: _+ j: T4 l9 F' Rvar System = xdc.useModule('xdc.runtime.System');& M# A2 \0 A( |' z& t8 b
System.SupportProxy = SysMin;) P' R9 O. ]5 I# |. g6 R3 B; k+ B
# ]+ f+ T; N5 S; [! v" k
/* configure SysBios to use the lower half of Timer 1 */
7 z3 `: q; y( n' @2 p' Q1 wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) |; S, J( I% ]6 I0 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) F, q9 g: n$ K  Z
Timer.timerSettings[1].master = true;
# }! ^6 |6 i4 E! l/ w* w: STimer.defaultHalf = Timer.Half_LOWER;
; {' S9 T- P2 L% qClock.timerId = 1;3 N6 g6 @& s- Q

; R2 }- n) ^  V% e% f5 B
4 Z% y0 i- a1 r/*
( V  U3 @* _5 k6 e: Y% Q *  ======== Miscellaneous Configuration ========
5 ?8 q& O( w3 z */8 V4 x$ N' ?6 w; L- N6 l% |5 L
% C8 ~! r4 e9 E9 F
/* set default diags mask */9 I9 a) {( F6 g; W4 y1 t! f( e
var Diags = xdc.useModule('xdc.runtime.Diags');
, R' {  E) }% k: O# Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 U7 g6 x9 U4 p( |2 j7 |0 p& X

4 O( ~! k  Z2 B) H6 n3 P  }# QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, Z1 {! h, Q$ b& S0 u' l* o$ \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 a' p. g! N% V+ Q$ h: b# z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( C9 L1 C8 F8 w) q+ W7 PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) T3 L2 S! E: w- `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  @- r* `6 T; X0 x- p6 EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ M+ P% Y. M  [3 q4 qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, u; L' A* Q; SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 r+ J8 w( T0 f0 m( C, o4 A; ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% L8 n* |" A+ KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ e" S) |) P& x. O% I: I  ?
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! T* w; G; W1 l" MDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( o" A0 {% G) o4 j! g3 Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 T* x( E7 L; |7 S" o% _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. ]9 t& M) L" f7 }) Y0 J: @2 g
3 H  Y' [( l6 C7 r
/* override diags mask for selected modules */8 U: z8 U0 ?, ]3 q
xdc.useModule('xdc.runtime.Main');$ F5 x8 R9 ~& a0 L+ F2 d6 Z7 M( ?9 n
Diags.setMaskMeta(3 y/ G1 K! ~# v5 D. ]) ?- T" P- ?
    "xdc.runtime.Main",
% I1 ~( l9 t* Z: V8 {. o    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 b& N: P. s8 F, {7 a' Q
    Diags.RUNTIME_ON
' d% W+ l: P' b0 ]- s% A);- z/ A0 O9 D! v" @
7 P+ H+ X8 J- w% c+ p, `: U
var Registry = xdc.useModule('xdc.runtime.Registry');
1 u* J9 a( I* d0 a0 _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& Y& n' f) X4 ]- \% D4 O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 p# z, p# a8 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 e# f  n% ~  X9 u. X# V6 Y/ HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( b4 K7 k- \; o6 ]% q7 T

7 s, N( U' `: a0 U5 O4 s/* create a logger instance */
6 s+ C2 y+ w  ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% [* U  y& R! l- \( ?. T1 X) N6 G
var loggerBufP = new LoggerBuf.Params();
6 o5 d! u) ?9 i8 C2 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  w1 R- y' a) F0 B' \. KloggerBufP.bufType = LoggerBuf.BufType_FIXED;. O) f! _. v' N9 L1 r- u  \9 d
2 W# p9 x; u8 L' Y4 S+ J
var appLogger = LoggerBuf.create(loggerBufP);
, y  D! }/ n7 V" QappLogger.instance.name = "AppLog_Core1";4 ]# Z" g# s/ T8 R
Defaults.common$.logger = appLogger;0 q% M/ j" p  J" q: K" f- c
Memory.defaultHeapSize = 0x8192;      k' f) r5 X7 A: Q* [5 F5 `& [
Idle.idleFxns[0] = "&LEDStatus";
$ V; j. J, h* e% @6 }. ^Cache.initSize.l2Size = Cache.L2Size_32K;( o# t0 N' a9 S. I* L0 |, ]2 {

; W+ H6 f4 ~. A# u; T8 p
回复 支持 反对

使用道具 举报

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 */0 ?# q% {( o8 {4 `6 ?7 u4 F" `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 u* R# h* R  f- z% e
var heapMemParams = new HeapMem.Params();
+ A" D$ ^6 [+ O2 b  y$ F+ ~/ m: m5 HheapMemParams.size = 0x4000;8 j  P' `' }6 @" N* h. E

" f8 W: g) U+ d& m  U; wvar Memory = xdc.useModule('xdc.runtime.Memory');6 ]6 N1 o( _/ `/ O" }, f' l$ _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. \% g" }' F3 R
9 F1 D6 ]. v& F8 c, W
我大约calloc  每次共计大小为5K*16bits,3 a4 x' n9 d  J2 f* @
而默认配置才0x4000、需要改大。
) K0 Z7 Y" ?/ r5 Y1 f$ ~( c* a0 o9 D+ O$ B1 g6 h0 W& J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 ^4 M3 v/ K9 }' g: H
Program.heap = 0;) ?" F: q7 y5 q! g# m' G
Program.argSize = 100;  /* minimum size */
( O1 K, T9 V! G! t* \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 08:53 , Processed in 0.047669 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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