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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: U$ |9 k$ |3 I$ w5 @+ @3 R& o& `. @9 l: ?0 S( c) N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  q1 ]8 T0 @/ ]+ p' G9 [
+ o. c1 D$ @( U/ o5 e# m8 ]其他程序段。。。。。
0 h7 g, t& {) T+ w4 H  K; h
( }  e% O; t/ b/ F, c! C" T5 Q' v   free(x_d);. i$ }: k5 ^% q4 q4 K$ V
7 {  M# w% _  h
使用DSP侧单独调试功能,验证动态申请没有问题,
2 l/ h, S- f3 T1 Z* }* M& m/ K: T1 B# U# U
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' t1 K1 T1 ^: [& v
8 Y' C2 [) J8 \8 |& l; J
* M4 R7 |" f9 U9 K* T! ~- {
1 w2 J! S7 M6 N* j

( R8 `! H& P6 }5 J( i+ w
' S: ^) V/ a- [
6 H. t- G$ D) ~8 ?# v
  P; U& ~8 l7 c+ j
* i$ _1 j& m# ^: q) O0 c3 X  J$ a. Q1 [: o: \- u6 A

+ y$ B$ J$ @4 o
分享到:  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 */- r  V) P3 E! s$ J
Program.heap = 0;
2 N. A: U% L/ H/ j) w5 V+ |) W3 VProgram.argSize = 100;  /* minimum size */. K+ u5 C2 J, I6 r0 v7 i2 E! H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */6 ~3 f# w, @" {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% y5 A7 f  h* ~+ o: M
var heapMemParams = new HeapMem.Params();) @, U5 E* p/ [/ P8 ?, w  I
heapMemParams.size = 0x4000;
! G3 e$ I+ Y, a7 }" N/ I, m7 w* T; P. v  U+ @( @
var Memory = xdc.useModule('xdc.runtime.Memory');/ W9 r. C. ?( t7 I7 l" I' G8 c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, K! c0 v+ I/ L" R
8 y( A* K: p# D: u+ U  N- @我大约calloc  每次共计大小为5K*16bits,- W- q% T5 V4 W1 P
而默认配置才0x4000、需要改大。) g2 f' b  l4 v9 c) s5 M
9 u2 R. i% U+ p/ P0 n7 {; A  z; i+ p7 K
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, r0 ^  ~" h0 K( v' o% z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 T  N; Z2 L' u; l0 c  H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ v* N  R! I) U- H2 q
+ i  T% C. @6 ]7 N& u7 m0 U
是不是需要在DSP.CFG中进行配置: n# H0 Q* q2 b' R$ B! I
我现在的配置为
1 `9 H- _; [- e: n2 }  I3 \5 e; Y# ?0 k
/*: Q0 g, ^1 F5 _9 G) ]
*  ======== Operating System Configuration ========
: A; ^* D2 w' X- @- }# a- n2 H: d, j */
0 x9 V5 D  M. ?/ L! Z  \" f' W1 E* T( o6 x0 o# d
/* no rts heap */  O6 B5 N! ~. V2 i
Program.heap = 0;
# _! Y% O( j& x- N' W/ HProgram.argSize = 100;  /* minimum size */) U0 {3 C1 u% K. G3 [6 u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% _9 n& x% l9 v! b/ w/ L( h* T, ^% ^6 |) X8 Q3 @
/* create a default heap */
5 A1 i6 e: Y/ V" `7 j  r* `$ Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 O/ Q- c! s+ i" T
var heapMemParams = new HeapMem.Params();
0 G8 r! p- v) u0 z4 R. FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. O  x3 F- h; G5 W4 v( Y9 d2 o
% X' U/ |. M( t  j6 n
var Memory = xdc.useModule('xdc.runtime.Memory');
' a/ `/ y& M' v: i, v3 {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( i% F+ A5 E2 ?- b) b! m
7 ~( `! g5 f% y+ L( M2 i
/* configure System module */+ Y! R' M2 ]: G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 G( m  q" O+ e6 V4 TSysMin.bufSize = 0x1000;
$ E8 v$ H- n) h. }/ f' z+ JSysMin.flushAtExit = false;; z2 r/ M, U& _8 h7 R7 E
- C  s8 j( S3 B
var System = xdc.useModule('xdc.runtime.System');
; w! a' g9 r7 v) zSystem.SupportProxy = SysMin;
5 P0 S! F/ O8 y- Z: _
% `( c/ u, X5 a  N/* configure SysBios to use the lower half of Timer 1 */8 g; R/ c1 ~& z$ c% L* L
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 Z0 `3 ~% h- u' W4 kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ |) q1 W9 B: k+ k- _
Timer.timerSettings[1].master = true;
; y; d9 `: O* T# h! k9 d% dTimer.defaultHalf = Timer.Half_LOWER;; R; l! q& W  b" ~, X
Clock.timerId = 1;
! U7 f6 V( t" P6 n+ V0 H" q+ d/ S' {  B8 }# c  w/ }. U
, r$ j& B" m( I+ w) i) H6 ]. n
/*
) `( j' H( s/ v *  ======== Miscellaneous Configuration ========5 B/ E8 x/ q, J7 p2 ^
*/
5 K6 {7 G5 S( U/ O) ~0 a$ X* n- y' D+ s* R7 a" J+ D, c5 |
/* set default diags mask */  ]  ^- Q! ^- }# G6 t3 }3 @
var Diags = xdc.useModule('xdc.runtime.Diags');) K) N( g8 Q- I# T2 R0 n% R
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 s6 S% I3 p9 K3 X# m

* a" o7 o5 g  i3 o* L8 s0 ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; F# k, A3 x; r9 H  \* V% ]* n9 Z  Y) ~& x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: t% ?5 K/ L  `% ?% Q7 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- B7 D# ], l* q! O' }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ Y6 ^% j7 {& Y! ]! X; C! y; r' B% @$ hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# F8 D2 P) e8 ^  X1 f# R" v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  V8 u7 D3 T6 J
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. J2 W" L" f+ m' |! ~+ N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" V1 `2 q5 E4 O' R* F. e7 q: X: vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ F2 o  T5 c$ `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# e3 s  I' o/ O/ X. ~$ ]# [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 ?$ G& C: a+ T# @) ]$ }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" a0 ~1 M7 h5 |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 h. R9 \2 K5 wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# L) P- A) {4 L1 l/ Z' F3 y- V1 w
& M! J# b* X& T7 W2 S0 I+ Q
/* override diags mask for selected modules */
4 V' K3 W5 F. O" Cxdc.useModule('xdc.runtime.Main');) `( v5 Y; z1 w( F
Diags.setMaskMeta(. j+ D; t) K# ^: s0 k
    "xdc.runtime.Main",$ |- U" G1 ?* L" p0 c9 }9 E9 F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: o1 K1 w1 u' j
    Diags.RUNTIME_ON% y1 {6 B( w& B9 n6 g( p
);
, ~1 ]7 H3 j, m: P7 i5 h: |( V7 z9 C2 n; @
var Registry = xdc.useModule('xdc.runtime.Registry');% ~- \5 S, z2 |% J4 z/ G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 b0 B  G% R0 b# X1 V. ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* F) }: @1 i8 H6 m) Q2 m7 W2 j) C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  h1 j8 x( o7 e/ Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* \; x5 e& T3 Z$ p. R4 B2 k
: R, `% S2 z$ B' U! @8 V/* create a logger instance */# z* \" [* h$ L/ X
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; b# W: W. j4 s# v! avar loggerBufP = new LoggerBuf.Params();
' S  ]  r$ _+ nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  e) d' L+ k, _' U) u1 B- WloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  A+ \  R6 J2 u' Y% K' N* M$ P/ o  G/ v! M% m! w' k6 z
var appLogger = LoggerBuf.create(loggerBufP);. q; L1 h4 }2 ?
appLogger.instance.name = "AppLog_Core1";
* [$ ^* S+ z& J3 H4 SDefaults.common$.logger = appLogger;  [. Y/ f7 `" h( Q; \+ F
Memory.defaultHeapSize = 0x8192;    & N+ O- S, [9 v4 q( `. o$ u
Idle.idleFxns[0] = "&LEDStatus";2 \2 v+ \; E, g( z- y
Cache.initSize.l2Size = Cache.L2Size_32K;
- F3 }, ^# @* \2 G8 k% {% q, D6 o6 O2 ?# u+ @; p& k$ M
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 22:37 , Processed in 0.043748 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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