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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% y1 c7 x# G) A' I
; x8 Q2 p8 @3 S3 A    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( V$ z# r# V3 Y$ m; M

; ^" {; x2 L$ w) c6 a0 ]3 s其他程序段。。。。。0 e9 T1 a4 A3 ~
6 }7 \& M) @" I9 V- c* D  L8 r
   free(x_d);
9 F* m( o4 D: Z! {
( v; J$ W2 a. i+ j使用DSP侧单独调试功能,验证动态申请没有问题,
& j3 _" n& D$ e, U0 y5 Q8 Y$ }7 j2 z7 q, f' Y% B3 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 R4 G# V. @6 C  W, E$ U

5 u0 H" ?, L+ D$ S% Y
. \- _" ]  G7 H( C7 z/ ?5 S  Q$ s/ Y4 U) }9 E

2 W+ l7 o3 q* Q, \) B- h! f( V7 n6 K
! G$ S1 H3 x; M1 c2 r; m% R: P7 |* t0 A* [  q# U& R

  \: J9 A2 i3 o7 r) Y' q" m
5 B, q9 G; `: Q1 o" D+ p2 H
. k6 H9 w* g* B4 _
$ s- V8 q$ G6 Q6 S, ^8 N+ o, v- }
分享到:  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 */' f& }* K. q0 l) H
Program.heap = 0;
/ v* y4 e5 H' Y$ YProgram.argSize = 100;  /* minimum size */. |5 Q2 n2 s% p
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, t& Z7 E9 K' k  c! O8 N2 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" }# G" S0 e+ w7 gvar heapMemParams = new HeapMem.Params();4 e* _7 y! }& q5 T
heapMemParams.size = 0x4000;
. A+ t0 e% _5 N, _, i  E, G5 {6 E& P$ |4 R2 A6 ], ^" N* a
var Memory = xdc.useModule('xdc.runtime.Memory');& c% P, {' [' C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ ]8 G2 q3 l6 q- ~, M0 x
) c& X' q/ ~6 n. }% f: n我大约calloc  每次共计大小为5K*16bits,
- v% a# Z- ]' r. U2 J) A而默认配置才0x4000、需要改大。" b! r0 U3 x2 s# g- X
3 B/ a! l0 w% j/ Y; o
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明, @! g+ ]  C7 B5 l: y: ?: N5 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* r$ p" T3 |' ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 e- q; k& y- a! R8 M) h% m$ q; E
! U3 w4 l7 r& }5 E4 [3 o: K
是不是需要在DSP.CFG中进行配置: k7 k% A) S4 ?/ F% ?8 [
我现在的配置为
4 l; j3 q4 b+ m' M9 f
( W, I6 p4 q3 r9 |0 n4 D& r- [* \% w/*! J8 d/ x3 ?1 i1 H2 P. f( w& R
*  ======== Operating System Configuration ========
; P5 ]+ y* S& Y& F */
/ o6 y9 C1 n& X0 ?
) h' s! S# M2 m& u0 f/* no rts heap */
$ \  C1 @0 r5 C+ F7 O2 Z; `1 DProgram.heap = 0;& [* ]1 Y  B" l& }
Program.argSize = 100;  /* minimum size */3 _7 @7 e, B$ n: L; W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' ~' [8 B! o; k% q
3 k# n; k1 O. {
/* create a default heap */
5 |. y  I5 {& F3 Q# W' ^( `! pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% M) @7 @# ?% ?# A* c
var heapMemParams = new HeapMem.Params();
- `+ ]7 U9 Y( J  j: w7 jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' ]$ F" ]* u, u! |* k5 J2 C7 M# w+ b/ U! ~! E( O; ]
var Memory = xdc.useModule('xdc.runtime.Memory');9 I2 I9 ^4 X" _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 k! n6 }3 o7 {, |5 _5 M
( M. o3 u$ E/ [( a
/* configure System module */7 h& ^% e9 X( U7 n: g' |7 H7 T
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 Y" j# f9 R5 T8 q$ pSysMin.bufSize = 0x1000;, C" y9 a' x, B7 f
SysMin.flushAtExit = false;
# ?2 ?* O8 n# x! M
5 G$ v  i4 |( G, o# fvar System = xdc.useModule('xdc.runtime.System');* [1 z( d" m2 V
System.SupportProxy = SysMin;
8 x9 Q; N" ]* F; D
7 }! }2 c" d) E* ^8 L1 ^. X/* configure SysBios to use the lower half of Timer 1 */
6 S( U; f" H/ g: Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 S/ b9 ~# Y% `# `/ M; v0 J$ U% pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  `' E6 M/ @2 r, L$ p4 Y8 A, STimer.timerSettings[1].master = true;
" r- z/ Z$ j5 u0 F5 o& YTimer.defaultHalf = Timer.Half_LOWER;
$ D6 U) N! t& S' i% @# O2 v/ y& AClock.timerId = 1;
7 g, Y! n+ v6 l, t# F
+ o, U' |+ S( L" u+ v) P2 s, }- `8 g% B, `8 ^1 s
/*5 Y% E5 P3 R2 K1 S" |2 E+ w
*  ======== Miscellaneous Configuration ========+ y5 y) {) s. |2 H
*/. f& p$ t7 h2 l8 R+ j4 K6 _$ X

' F% t! C" N0 i% c6 j/* set default diags mask */
& _. I/ d1 `7 ?3 ]: w5 Yvar Diags = xdc.useModule('xdc.runtime.Diags');  g4 ~' q% Y% J% r  x
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# k" j8 R* J& k, F% c
) n( k3 F3 V9 Z8 b% ^1 i# SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; |3 w' n* J- w( k# r* _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ p1 {8 X( k. j) w, t' B! JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; N5 J  Q8 W# T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! n  w* M9 d: x# a8 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  z5 U2 {" Z( E, v# ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 ?3 P7 _9 X$ W% S' |! x& h+ C
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ P8 ^  O3 O; c  b* t: {$ T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- D6 z" N7 u" r6 h3 b" j$ x8 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& n* ^% k, B5 O2 j8 GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. B- K, U$ S# nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 h: C! ^9 B1 w) t9 G+ `5 S: l5 KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: Y) s+ t2 m4 {8 HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; q7 n8 u+ X8 T8 c; E5 k0 H; Q1 ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 z! F5 o4 s4 ?6 {5 _0 h% S6 b* {' W, z, o% G# ~( f; D
/* override diags mask for selected modules */
% r* O+ B3 {, \+ Nxdc.useModule('xdc.runtime.Main');
% p6 C5 \8 G. \3 s3 y) z2 W) a- e3 _Diags.setMaskMeta(
0 T% O# v( c) j- h( e! h' q    "xdc.runtime.Main",
# E/ h" \5 F; o& t    Diags.ENTRY | Diags.EXIT | Diags.INFO,. E2 V* Y$ \( S, V3 a
    Diags.RUNTIME_ON
; G0 e& |4 X" e);
6 H# ?- Y, O( U2 \% b3 a' L5 ~5 [* S( @& p3 A
var Registry = xdc.useModule('xdc.runtime.Registry');$ ?( t' n3 B0 G) ~: p( v( W+ O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ g  u# ^0 `+ X( C! P5 d3 URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* k! c! c% ?6 S2 R; a7 b5 z; g! ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& H# C/ E5 h, _8 {. tRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! X/ H' y" Z/ V; D1 |
# c# |4 E3 i' g
/* create a logger instance */
. a0 P8 @% }! f- P4 z5 J8 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) U4 |5 M0 }) E* [- q: C3 h2 mvar loggerBufP = new LoggerBuf.Params();
6 v% A6 j- t5 BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ H3 H5 Z& H* X* W+ ~! U
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* H" }# A! X! ~3 ?* T
: ]5 X2 H5 ]6 [4 Y& ~1 K0 m' lvar appLogger = LoggerBuf.create(loggerBufP);
3 K8 r2 ~7 P% Z% a& \9 rappLogger.instance.name = "AppLog_Core1";# S- \6 C" s6 N
Defaults.common$.logger = appLogger;1 K' P/ X& |5 k' e% s
Memory.defaultHeapSize = 0x8192;   
* [3 [9 l% q( s3 p. L8 H+ i4 XIdle.idleFxns[0] = "&LEDStatus";5 U) A2 p( M% K8 ]  V8 Z9 e$ \
Cache.initSize.l2Size = Cache.L2Size_32K;! c4 J% S6 a- |+ O! \. g" w
) t- Q. C" E8 O  h9 v7 F) [* k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-30 01:33 , Processed in 0.044675 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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