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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. L, A' ~0 P. J! N" O) v# q# x; Y
% @, C' _3 u3 @: }4 d# e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. ^  Y2 w" Z7 m& V7 B4 ^9 _' T

- Z0 |. ^, r& L; U% d6 l. g! `其他程序段。。。。。
8 H0 h/ Y) e% X, R 5 n7 J2 m9 j2 v  I/ d
   free(x_d);4 q- L2 Q( d/ [  ]. E4 w

# D; Z2 t- U  {2 N使用DSP侧单独调试功能,验证动态申请没有问题,
4 G/ u" W% }  {8 I$ G' Y  @0 A8 v4 J' g, n) U( J) @
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ [" o6 h- {* l
) \" b: A' o! N: m9 w, t3 }

7 c9 q: H4 R& g
' o5 Y7 ?" ]3 u' Y; P
3 Y. n" ]: T6 R+ i9 `9 d
3 `& @$ C5 z5 X+ J. H8 @  y2 I. P' a  ], P4 {; v/ P

3 H8 R- t0 v9 C# d' X& b; h" j8 v( ^9 q3 D! e+ B6 s

, G. k9 l. r6 U* C2 Y3 k' g5 R& y. ~5 @! W9 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% y: C% ]2 c. C: q) Z9 Y/ _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- v3 i4 U5 Z+ z1 Y3 u& p, R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), u9 O: e- l1 V4 Q, s

' I" ?3 O, k7 O是不是需要在DSP.CFG中进行配置
  }1 s! h% U9 w- _- H% e我现在的配置为; C- b) f/ [) B% b( C8 |! j
( E2 e" {3 z/ Y1 h" l
/*1 I# \; ^- {5 j: M$ }
*  ======== Operating System Configuration ========( B. I% G9 ^) U- }) P
*/
7 I, R: {7 }1 g1 }' m% |$ @5 D& U; g/ {; k' ~1 \2 e& G
/* no rts heap */
4 I; i; K, Q1 q& pProgram.heap = 0;
- i! B9 n/ t' E  _* wProgram.argSize = 100;  /* minimum size */# P6 v1 m! p* n
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 X3 e/ ]; ~! T  a  a! o, l. r5 I. G" z
/* create a default heap */
- I3 M1 {+ d6 U* G1 Z+ K4 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 w( ^8 w7 ^* C1 @% y6 T/ c% o: e; F+ svar heapMemParams = new HeapMem.Params();4 Y$ b( \8 f  m9 F! G! k$ n% e$ R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ Y0 [! |9 O5 ^! q& R- ]

& N% X7 B/ T; @4 ]
var Memory = xdc.useModule('xdc.runtime.Memory');8 Y# M% K! W* V& }: w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 R7 ?! u8 [- @. @2 k% p$ y
" s# g% K/ I* f; r- {% w. x
/* configure System module */
( ]6 U! L7 S8 [var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ y. O" r  v5 T3 W% [/ \5 t2 cSysMin.bufSize = 0x1000;* V2 N6 U7 A; a0 r; s+ l7 o
SysMin.flushAtExit = false;( z! K* X. l- {

. c! j+ @9 b* d: E$ j4 @) svar System = xdc.useModule('xdc.runtime.System');
( h$ [5 I: l4 ?* ~System.SupportProxy = SysMin;0 t/ T, R" P; Y  t

# O, \- ]2 J% b$ Y! ~  H" F+ p$ F/* configure SysBios to use the lower half of Timer 1 */
' Q7 E2 p% r- |5 y* K6 Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ N( L  j$ I0 i( H1 f5 J3 wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ w' b$ X2 [/ G" I, w4 f; C* \/ W3 d0 [
Timer.timerSettings[1].master = true;2 T6 z- M% S2 B" w. V# R; Q
Timer.defaultHalf = Timer.Half_LOWER;) i+ X: ]/ Y# p- ~3 ?  a
Clock.timerId = 1;
, X% ?# y$ z+ b! D& w- N' x( S5 J1 z. y8 s8 U. x2 T/ x- E" c1 q
4 w: y) {' [9 ^, q9 d
/*% @/ M+ ]5 n" t7 P2 I2 u
*  ======== Miscellaneous Configuration ========
2 k4 \. n* ~0 M" P */$ y8 A4 V' V& d3 J
# b$ e9 V, {: c5 h% L" {2 G
/* set default diags mask */* K  b8 ?$ Z% z
var Diags = xdc.useModule('xdc.runtime.Diags');
; a1 q4 H; v% \) i* r9 Svar Defaults = xdc.useModule('xdc.runtime.Defaults');" f$ t; u3 |$ I9 a

( U: L% s% N% b8 V! S  H- p' aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ H3 B, H! @2 `; X, x7 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& v5 }# D  H# w7 [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* W! c2 x( K: J5 y1 q* D8 DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 E0 A" q2 Y9 E3 y3 q& ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 C8 y( X2 t7 v- H$ d& W( H+ O
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- t1 |5 x- O5 G2 BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 J$ P  O; [7 fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: ^! k+ L  n/ B( k3 \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 }$ O  L. [; Y. @; z& r. Y" R  H7 NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( ?6 ]8 R' i" V% U% w" R9 Q- Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) H! c" L! W  j( H, {" R3 P' S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 B$ D3 ]2 \% T& IDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 n% N# a6 Y' j3 X; \
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' i1 E5 V6 {! i
+ l0 h, x/ h+ h! f/* override diags mask for selected modules */$ _' [3 F5 }# {3 K
xdc.useModule('xdc.runtime.Main');' v$ a7 m$ W) m- W# n
Diags.setMaskMeta(
! A1 Q! r3 M# T! Z0 d$ K    "xdc.runtime.Main",
5 Z, A( i2 W6 d0 Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ L" \, O  {+ `& O6 H9 s0 f
    Diags.RUNTIME_ON
9 j6 V4 c# f  B' P7 C);, F2 g1 i. g% m* a
0 N, C: u. a' i1 k2 l+ t4 {, r/ Z
var Registry = xdc.useModule('xdc.runtime.Registry');
7 B* k, s( G( h/ x" b7 [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! t4 s4 ?8 X- w7 g' ?Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 h4 o- u. h+ E! q% CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 c/ f9 H& b2 m2 h7 [" {: a; ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% M; I! o  E' k0 M, `3 {2 b
- ?5 c1 h/ _' E7 |; N3 P9 m, }/* create a logger instance */- y) |1 R* c  O( ]* h& W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( x# x, s' l; m* @& V- S. T. T; \var loggerBufP = new LoggerBuf.Params();
3 c$ k" Z2 x7 v& u! CloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 b7 t  @. j! L% r8 `) }, ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( e% l# j0 F0 t  ~- W, K5 S9 Z

# `% }: i! d- G3 f2 ^2 gvar appLogger = LoggerBuf.create(loggerBufP);
+ e6 l+ M6 `! s, T* D4 @) u, Q! z( BappLogger.instance.name = "AppLog_Core1";
  d. _& x1 g( K" H( F8 t. yDefaults.common$.logger = appLogger;" N" [5 @6 i* u; g: j! P
Memory.defaultHeapSize = 0x8192;   
% N. b$ H3 i5 v0 j$ A" o8 iIdle.idleFxns[0] = "&LEDStatus";
, }% H5 G7 u  N3 d9 J8 u9 p1 j1 ]  HCache.initSize.l2Size = Cache.L2Size_32K;
4 c/ V6 H) k, c+ ?) s+ U" M, l
, p6 B6 p; Q; \& {- z  @7 ]( 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 */
% W5 Y/ Y% l% v+ Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 V1 S7 X' `6 ~0 h' u1 _
var heapMemParams = new HeapMem.Params();* Z% P$ B+ S, C& {- E3 C; N
heapMemParams.size = 0x4000;
1 N8 u7 C% {' T6 z: g
' a' {8 I- O; |var Memory = xdc.useModule('xdc.runtime.Memory');
' W' U6 O# x. p- V9 @& P* QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. C5 V. F  A9 j1 `$ q0 \1 T
* V1 P& }7 n) i' f' f
我大约calloc  每次共计大小为5K*16bits,! Q6 |* o( g' f: b$ X
而默认配置才0x4000、需要改大。
  p  F6 z  ]: a* a. Y; a/ r: n7 ]8 _  {) ~
! k+ H  E) r! z/ K& z- Z' K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& x5 `. C4 l2 f+ YProgram.heap = 0;) z( u0 x* W9 B, A; D! w
Program.argSize = 100;  /* minimum size */
! a9 z9 |  k$ [% V5 Z2 ]& C4 h* ]- [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 13:57 , Processed in 0.042055 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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